覆盖 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()
当我在我的视图中保存表单时,我努力阻止在数据库中创建新行 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()