ModelForm中的create_or_update
我想要一个可以根据请求参数来创建或更新模型实例的ModelForm。
我一直在尝试拼凑一些代码,但发现我的Python水平不够,ModelForm的实现代码也比较复杂。
我找到了一段关于如何使用Model的update_or_create代码片段,但我觉得如果能把它和ModelForm结合起来,那会非常有用。
我希望它的行为能和ModelForm.save()类似:
class BetterModelForm(forms.ModelForm):
def create_or_update(self):
#magic
return (instance, created, updated)
另外,我也想听听为什么这样做可能不是个好主意。
1 个回答
2
这其实不需要放在ModelForm里面。模型本身已经自动处理这个问题了——如果模型实例有一个值叫做pk
,那么它就会被更新;如果没有这个值,就会新建一个。所以,当你创建表单的时候,只需要传入一个已经存在的模型实例,这样在保存表单的时候就会更新它;或者传入一个空的实例(甚至可以传None
),这样就会创建一个新的实例。