Метод Django form_valid
В представлении моей формы интересно, что если я не добавлю метод 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)
In what view do you use this? If it is a CreateView [Django-doc] or UpdateView [Django-doc], it is fine. For a (simple) FormView [Django-doc], it is not since a FormView does not save the form.
Однако вам не нужно сохранять форму с помощью commit=False для получения экземпляра. Простая однострочная команда для установки пользователя выглядит следующим образом:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView
class MyCreateView(LoginRequiredMixin, CreateView):
# …
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
Название product_form в product_form = form.save(commit=False) также несколько вводит в заблуждение: метод .save() возвращает не Form, а объект Product, следовательно, это Product. Но вам не нужно сохранять этот продукт в базе данных, так как CreateView и UpdateView вызовут функцию .save() формы для сохранения модели вместе с отношениями "многие-ко-многим", которые указаны в форме.