Django:表单或模型中的save()方法?

时间:2017-07-26 18:44:19

标签: python django

这里有一个非常普遍的问题,但我很好奇你何时以及在什么情况下在ModelForm中使用模型类本身的保存方法,反之亦然?

模型:

class Model(models.Model):
...
    def save(self, *args, **kwargs):
        super (Model, self).save(*args, **kwargs)

的ModelForm:

class ModelForm(forms.ModelForm):
...
    def save(self, commit=True):
        model = super(ModelForm, self).save(commit=True)
        if commit:
            model.save()
        return model

谢谢!

2 个答案:

答案 0 :(得分:0)

两者都覆盖了默认方法。唯一的区别是Model.save正在保存对象属性,但ModelForm.save正在保存表单数据。 ModelForm不仅仅是一个简单的Form。它链接到模型实例。因此它会自动访问相应模型的字段。

答案 1 :(得分:0)

差异取决于您的需要/用途。如果您知道将始终使用ModelForm创建对象,那么您将逻辑放在ModelForm.save中以执行在保存数据之前或之后所需的内容。如果您知道对象也可以直接创建,但显然不会通过ModelForm,那么您可以在Model.save中编写逻辑以确保数据的完整性/一致性。但这并不意味着在saveModelForm上覆盖Model本身都很糟糕,同样会出现需要两者的情况。