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。但是您不需要将该产品保存在数据库中,因为 CreateViewUpdateView 将调用表单的 .save() 函数来将模型与 many-to-many 关系一起保存在表格中指定。