Разница между методом post и form_valid в базовом представлении generic
Можете ли вы объяснить мне, в чем разница между двумя методами, основанными на общем базовом представлении в Django: post и form_valid? У меня есть оба в моих представлениях, и оба сохраняют мои формы. Я использовал их оба, потому что этого требовала моя практическая задача, но понимания разницы между ними у меня нет
Вот часть моего файла views.py. Надеюсь, вы сможете пролить свет на этот вопрос.
class SellerUpdateView(LoginRequiredMixin, UpdateView):
model = Seller
template_name = "main/seller_update.html"
fields = "__all__"
success_url = reverse_lazy("seller-info")
login_url = "/accounts/login/"
def get_object(self, queryset=None):
seller, created = Seller.objects.get_or_create(user=self.request.user)
return seller
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["user_form"] = UserForm(instance=self.object.user)
context["smslog_form"] = SMSLogForm(instance=self.object)
return context
def form_valid(self, form):
self.object = form.save()
user_form = UserForm(self.request.POST, instance=self.request.user)
if user_form.is_valid():
user_form.save()
return super().form_valid(form)
class AdUpdateView(LoginRequiredMixin, UpdateView):
model = Ad
template_name = "main/update_ad.html"
fields = ("name", "description", "category", "tag", "price")
login_url = "/accounts/login/"
def get_context_data(self):
context = super().get_context_data()
context["picture_form"] = ImageFormset(instance=self.object)
context["seller"] = self.object.seller
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
formset = ImageFormset(request.POST, request.FILES, instance=self.object)
if form.is_valid():
form.save()
if formset.is_valid():
formset.save()
return HttpResponseRedirect(self.get_success_url())
else:
return form.invalid()
def get_success_url(self):
return reverse_lazy("ad-detail", args=(self.object.id,))