Разница между методом 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,))
Вернуться на верх