Django вставляет запись вместо обновления

#django #django-models #django-forms

#django #django-модели #django-forms

Вопрос:

Я пытаюсь выполнять операции crud, но когда я пытаюсь обновить, django добавляет новую строку в БД с новым идентификатором pk. Я использую автозаполнение, установленное в primary_key = True (по умолчанию).

 @login_required
def edit(request,id):
    note = UserCreatedNote.objects.filter(pk=id,user=request.user)
    if request.method == 'POST':
        form = AddNoteForm(request.POST,note[0])
        if form.is_valid():
            
            form_data = form.save(commit=False)
            form_data.user = request.user //cause i have excluded this field in form.
           
            
            
            form_data.save()
      
   
    
   
    form = AddNoteForm(instance=note[0])
    context={'note':note[0],'u_form':form}
    
    return render(request,'edit_note.html',context)
 

Models.py

 class UserCreatedNote(models.Model):
    user = models.ForeignKey(get_user_model(),on_delete=models.CASCADE)
    note_title = models.CharField(default='',max_length=100,blank=True,null=True)
    note_tags = models.CharField(default='',max_length=20,blank=True,null=True)
    note_contents = RichTextField(default='',max_length=1000,blank=True,null=True)
    creation_time = models.DateTimeField(auto_now_add=True)
    last_modified_time = models.DateTimeField(auto_now=True)
    class Meta:
        
        ordering = ['creation_time',]
    def __str__(self):
        return str(self.user)
 

Ответ №1:

Вы должны передать note объект в качестве экземпляра для обновления.

 form = AddNoteForm(request.POST,instance=note[0])