2014-05-20 160 views
1

我的ModelForm的其中一个自定义字段包含要编辑的数据库行的pk。因此,我想首先检查表单是否有效,然后使用已清理的pk字段设置实例,然后保存表单。它甚至有可能吗?我可以在调用is_valid后设置ModelForm的实例吗?

我现在的解决方法是创建一个新的ModelForm实例,它不是很整洁。

回答

2

如果您的形式覆盖在实例中的所有信息,你可以简单地手动设置主键:

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.pk = form.cleaned_data['pk_to_edit'] 
    obj.save() 
    return ... 
+0

这不是一个新的实例,它是现有一个。那么这是否会用给定的pk更新现有的行? – shasanoglu

+0

是的,正如我所说,它会覆盖整个行。 Django使用“pk”字段的存在/不存在来确定是否执行INSERT或UPDATE,因此如果您手动设置它,它将更新该行。 –

相关问题