这里有一个非常普遍的问题,但我很好奇你何时以及在什么情况下在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
谢谢!
答案 0 :(得分:0)
两者都覆盖了默认方法。唯一的区别是Model.save
正在保存对象属性,但ModelForm.save
正在保存表单数据。 ModelForm
不仅仅是一个简单的Form
。它链接到模型实例。因此它会自动访问相应模型的字段。
答案 1 :(得分:0)
差异取决于您的需要/用途。如果您知道将始终使用ModelForm
创建对象,那么您将逻辑放在ModelForm.save
中以执行在保存数据之前或之后所需的内容。如果您知道对象也可以直接创建,但显然不会通过ModelForm
,那么您可以在Model.save
中编写逻辑以确保数据的完整性/一致性。但这并不意味着在save
和ModelForm
上覆盖Model
本身都很糟糕,同样会出现需要两者的情况。