1
我的ModelForm
的其中一个自定义字段包含要编辑的数据库行的pk。因此,我想首先检查表单是否有效,然后使用已清理的pk字段设置实例,然后保存表单。它甚至有可能吗?我可以在调用is_valid后设置ModelForm的实例吗?
我现在的解决方法是创建一个新的ModelForm
实例,它不是很整洁。
我的ModelForm
的其中一个自定义字段包含要编辑的数据库行的pk。因此,我想首先检查表单是否有效,然后使用已清理的pk字段设置实例,然后保存表单。它甚至有可能吗?我可以在调用is_valid后设置ModelForm的实例吗?
我现在的解决方法是创建一个新的ModelForm
实例,它不是很整洁。
如果您的形式覆盖在实例中的所有信息,你可以简单地手动设置主键:
if form.is_valid():
obj = form.save(commit=False)
obj.pk = form.cleaned_data['pk_to_edit']
obj.save()
return ...
这不是一个新的实例,它是现有一个。那么这是否会用给定的pk更新现有的行? – shasanoglu
是的,正如我所说,它会覆盖整个行。 Django使用“pk”字段的存在/不存在来确定是否执行INSERT或UPDATE,因此如果您手动设置它,它将更新该行。 –