ModelForm中的create_or_update

0 投票
1 回答
515 浏览
提问于 2025-04-15 22:08

我想要一个可以根据请求参数来创建或更新模型实例的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),这样就会创建一个新的实例。

撰写回答