簡體   English   中英

Django python - 每次更新屏幕時如何添加新記錄? 相反,它會更新現有記錄。?

[英]Django python - how do add new record every time I update the screen? instead it updates the existing record.?

每次更新屏幕時如何添加新記錄? 相反,它會更新現有記錄。?

這是模型。

class Dealer(models.Model):
    city = models.CharField('City', max_length=30, blank=True, null=True)
    contact_name = models.CharField('Contact name', max_length=250, blank=True, null=True)
    dealer_id = models.CharField('dealer_id', max_length=50, primary_key=True)
    dealership_name = models.CharField('Dealership name', max_length=100, blank=True, null=True)
    dsr = models.CharField('DSR', max_length=50, blank=True, null=True)
    email = models.EmailField('Email', blank=True, null=True)
    fax = models.CharField('Fax', max_length=20, blank=True, null=True)
    dealer_notes = models.TextField('notes', blank=True, null=True)
    phone = models.CharField('Phone', max_length=20, blank=True, null=True)
    rating = models.CharField('Rating', max_length=20, blank=True, null=True)
    state = models.CharField('State', max_length=5, blank=True, null=True)
    street = models.CharField('Street', max_length=60, blank=True, null=True)
    zip = models.CharField('Zip', max_length=10, blank=True, null=True)

    def __str__(self):
        return self.dealer_id


class Activity(models.Model):    
    dealer_id = models.ForeignKey(Dealer, on_delete=models.CASCADE)
    activity_number = models.PositiveIntegerField(default=1)
    date_created = models.DateField('date created', blank=True, null=True)
    created_by = models.CharField('created_by', max_length=50, blank=True, null=True)
    type = models.CharField('state', max_length=50, blank=True, null=True)
    activity_notes = models.TextField(max_length=500, blank=True, null=True)

    def __str__(self):
        return f"{self.dealer_id} {self.activity_number}"

當它登陸經銷商備注頁面時,它將從用戶那里獲取詳細信息,輸入 model 字段並保存。對於每條記錄,可以有許多活動備注。 但是當我嘗試添加新注釋時,它會更新現有注釋,我希望它創建一條新記錄。

def create_notes(request, dealer_id):
    item, _ = Activity.objects.get_or_create(dealer_id_id=dealer_id)    
    form = ActivityForm(instance=item)   
    if request.method == 'POST':
        form = ActivityForm(request.POST, instance=item)
       
        if form.is_valid():
            try:
                
                form.save()
            except:
                pass
        else:
            return redirect('dealernotes/' + request.post.get('dealer_id_id'))
    return render(request,
                  'dealernotes.html',
                  {'form': item,},
                  )
 Can you help to create a new note every time? by activity number i should be able to update as well. 
urls:

  path('dealernotes/<str:dealer_id>?/', views.update_notes,  name='dealernotes')

How do I fix this issue?

不要使用get_or_create而只是使用create

item = Activity.objects.create(dealer_id_id=dealer_id) 

編輯 2(抓取 Edit1)

在這里,嘗試對其進行重構,以便僅在提交表單時創建 Activity。

  • 注意:我們正在更改模板,不要忘記這一點
def create_notes(request, dealer_id):

    if request.method == 'POST':
        
        form = ActivityForm(request.POST)
       
        if form.is_valid():
            try:
                form.save()
            except:
                pass
        else:
            # debugging error:
            print(form.errors.as_data())

            return redirect('dealernotes/' + request.post.get('dealer_id_id'))

    form = ActivityForm()   
    data = {
        'dealer_id': dealer_id, # Pass dealer_id to the Template
        'form': form,
    }

    return render(request, 'dealernotes.html', data)

模板

  • 我們將用dealer_id替換PK輸入,這樣表格在帖子上有效
<form>
    <input name="dealer_id" value="{{dealer_id}}"/>

    /* Insert the rest of the form */

    <button type="submit">Submit</button>

</form>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM