【发布时间】:2020-01-02 00:31:10
【问题描述】:
官方文档说form_valid() 是在发布有效表单数据时调用的。并且没有说任何关于保存数据的事情。但是我正在读一本书,上面写着
此方法的默认行为是保存实例(例如 modelforms )并将用户重定向到success_url .
所以,我有点困惑。
【问题讨论】:
标签: django django-class-based-views
官方文档说form_valid() 是在发布有效表单数据时调用的。并且没有说任何关于保存数据的事情。但是我正在读一本书,上面写着
此方法的默认行为是保存实例(例如 modelforms )并将用户重定向到success_url .
所以,我有点困惑。
【问题讨论】:
标签: django django-class-based-views
为此,您需要查看ProcessFormView(由CreateView 子类化)的post 方法的实现:
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。
【讨论】:
好吧,我找到了另一个关于编辑 mixins 的文档,它确实说
保存表单实例,设置视图的当前对象,并重定向到 get_success_url()。
所以,确实如此。
【讨论】: