django 中的 form_valid() 是否默认保存 ModelForm 实例?



官方文档说,当有效的表单数据被POSTed时,会调用form_valid((。并且没有说任何关于保存数据的事情。但我正在读一本书,上面说

此方法的默认行为是保存实例 (对于 模型表单(并将用户重定向到success_url .

所以,我有点困惑。

为此,您需要查看postProcessFormView方法的实现(该方法由CreateView子类化(:

def post(self, request, *args, **kwargs):
"""
Handle POST requests: instantiate a form instance with the passed
POST variables and then check if it's valid.
"""
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)

您会看到form.is_valid()方法被调用,如果表单已经过验证,则返回 true。然后你应该检查form_valid()方法在ModelFormMixin中是如何工作的。

def form_valid(self, form):
"""If the form is valid, save the associated model."""
self.object = form.save()
return super().form_valid(form)

它有点直截了当,使用form.save()方法将数据保存到数据库,然后调用super class's form_valid()方法,其中它重定向到success url

好吧,我找到了另一个关于编辑混音的文档,它确实说

保存表单实例,设置视图的当前对象,并重定向到 get_success_url((。

所以,确实如此。

最新更新