覆盖 form.save() 以不创建新记录但每次执行时更新数据库 table 中的现有记录

Override form.save() to not create new record but update existing record in db table each time it is executed

当我在我的视图中保存表单时,我努力阻止在数据库中创建新行 table。

我认为有以下代码

def checker(request):
  response_data=''
  if request.method == "POST":
    user_form1 = DocumentForm(request.POST, request.FILES) 
    if user_form1.is_valid(): 
        new_form = user_form1.save(commit=False)
        new_form.save()  # Image file gets uploaded in the server and new row gets created each time this gets executed
        user_form1.save_m2m()
        res=td_tab.objects.filter(id=request.session.get('proid')).update(profpicpath=new_form.profpicpath.url)
        response_data = 'Updated response'
else:
    form = DocumentForm() 
    response_data = 'Nothing to update!'
return HttpResponse(response_data, content_type="text/plain")

表格:

class DocumentForm(forms.ModelForm):
    profpicpath = forms.FileField()
    class Meta:
        model = td_tab
        fields = ('profpicpath',)

模型除了 profpicpath 之外还有几个字段。

问题是,在我看来,当 new_form.save() 被执行时,它正在数据库中创建新记录 table :(

我希望针对特定产品更新现有记录.. 令人惊讶的是,下面的行在视图中不起作用..即使我让它工作,新行被创建并且只有 profpicpath 字段被填充到数据库中 table 最新条目:(

res=td_tab.objects.filter(id=request.session.get('proid')).update(profpicpath=new_form.profpicpath.url)

如何防止在 td_tab table 中针对检查器视图的每个请求创建新记录?

或者是否有一些技巧可以覆盖表单的 save() 方法,这样它只更新现有记录而不是为其每次执行创建新记录?

您应该传递模型实例以更新到表单对象:

your_instance = Model.objects.get(some_data=some_data)
form = DocumentForm(request.POST or None, instance=your_instance)

if form.is_valid():
   ...
   ...
   form.save()