当我在视图中保存表单时,我正在努力阻止在数据库表中创建新行。
我的视图中有以下代码
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()时,它正在数据库表中创建新记录:(
我希望为特定的proid更新现有记录。 令人惊讶的是,下面的行在视图中不起作用..即使我使其工作,新行也会被创建,并且只有profpicpath字段在数据库表中填充最新条目:(
res=td_tab.objects.filter(id=request.session.get('proid')).update(profpicpath=new_form.profpicpath.url)
如何阻止在为查看器视图发出的每个请求中在td_tab表中创建新记录?
或者可能有一些技巧来覆盖表单的save()方法,这样它只是更新现有记录而不是为每个执行创建新记录?
答案 0 :(得分:1)
您应该传递模型实例以更新到表单对象:
your_instance = Model.objects.get(some_data=some_data)
form = DocumentForm(request.POST or None, instance=your_instance)
if form.is_valid():
...
...
form.save()