Django form_valid 方法
Django form_valid method
在我的表单视图中,我想知道如果我不在下面的代码中添加 product_form.save 方法会怎样,如果我添加它会怎样:
def form_valid(self, form):
product_form = form.save(commit=False)
product_form.user = self.request.user
product_form.save() # what if I delete this?
return super().form_valid(form)
您在什么视图中使用它?如果是 CreateView
[Django-doc] or UpdateView
[Django-doc], it is fine. For a (simple) FormView
[Django-doc],则不是,因为 FormView
不保存表格。
然而,您不需要使用 commit=False
保存表单来检索实例。设置用户的简单 one-liner 是:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView
class MyCreateView(LoginRequiredMixin, CreateView):
# …
def form_valid(self, form):
form<strong>.instance.user = self.request.user</strong>
return super().form_valid(form)
product_form = form.save(commit=False)
中的名称product_form
也有些误导:.save()
方法不是return一个Form
,而是一个Product
对象,因此它是一个 Product
。但是您不需要将该产品保存在数据库中,因为 CreateView
和 UpdateView
将调用表单的 .save()
函数来将模型与 many-to-many 关系一起保存在表格中指定。
在我的表单视图中,我想知道如果我不在下面的代码中添加 product_form.save 方法会怎样,如果我添加它会怎样:
def form_valid(self, form):
product_form = form.save(commit=False)
product_form.user = self.request.user
product_form.save() # what if I delete this?
return super().form_valid(form)
您在什么视图中使用它?如果是 CreateView
[Django-doc] or UpdateView
[Django-doc], it is fine. For a (simple) FormView
[Django-doc],则不是,因为 FormView
不保存表格。
然而,您不需要使用 commit=False
保存表单来检索实例。设置用户的简单 one-liner 是:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView
class MyCreateView(LoginRequiredMixin, CreateView):
# …
def form_valid(self, form):
form<strong>.instance.user = self.request.user</strong>
return super().form_valid(form)
product_form = form.save(commit=False)
中的名称product_form
也有些误导:.save()
方法不是return一个Form
,而是一个Product
对象,因此它是一个 Product
。但是您不需要将该产品保存在数据库中,因为 CreateView
和 UpdateView
将调用表单的 .save()
函数来将模型与 many-to-many 关系一起保存在表格中指定。