首页 > 解决方案 > Django UpdateView 不工作

问题描述

我的问题是当我使用时UpdateView,它不会更新记录。除此之外,它也没有给出任何错误。

当我调试代码时,form_valid()在 HTTP POST 请求之后不会调用该函数。但是我的表单类 ( AdvertisementDetailForm) 工作正常。我找不到我做错了什么。

控制台输出如下:

GET /advertisement/publish/adv1_3ad5f56a-d99d-4ed4-b878-1327b9fa1bf8/1/ HTTP/1.1
POST /advertisement/publish/adv1_3ad5f56a-d99d-4ed4-b878-1327b9fa1bf8/1/ HTTP/1.1

第一个应用程序views.py:

class PublishAdvertisement(LoginRequiredMixin, generic.UpdateView):
    login_url = '/'
    redirect_field_name = '/'
    model = AdvSummary
    form_class = AdvertisementDetailForm
    template_name = 'advertisement/publish_advertisement.html'
    success_url = reverse_lazy('brand:brand_home')

    def form_valid(self, form):
        pk = self.kwargs.get('pk')
        obj = get_object_or_404(AdvSummary, pk=pk)
        obj.advertisement_image = form.cleaned_data['advertisement_image']
        obj.adv_max_follower = self.request.POST['adv_max_follower']
        obj.adv_min_follower = self.request.POST['adv_min_follower']
        obj.adv_desc = self.request.POST['adv_desc']
        selected_categories = Category.objects.filter(pk__in=self.request.POST.getlist('categories'))
        obj.categories.add(*[cat for cat in selected_categories])
        obj.publish_date = timezone.now()
        obj.save()
        return super().form_valid(form)

网址.py:

urlpatterns = [
    path('publish/<slug:slug_name>/<int:pk>/',
         views.PublishAdvertisement.as_view(), name='publish'),
    path('delete/<slug:slug_name>/<int:pk>/',
         views.DeleteAdvertisement.as_view(), name='delete'),
]

第二个应用程序views.py:

class BrandHomePage(LoginRequiredMixin, generic.View):
    login_url = '/'
    redirect_field_name = '/'

    def post(self, request, *args, **kwargs):
        view = CreateAdvertisement.as_view()
        return view(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        view = PublishedAdvertisementList.as_view()
        return view(request, *args, **kwargs)

网址.py:

urlpatterns = [
    path('', views.BrandHomePage.as_view(), name='brand_home'),
]

标签: pythondjangodjango-modelsdjango-formsdjango-views

解决方案


解决方案:

当我像这样添加 form_invalid() 函数时,我已经弄清楚了问题的原因:

def form_invalid(self, form):
    print("form is invalid")
    return HttpResponse("form is invalid.. this is just an HttpResponse object")

我在 forms.py 中发现了错误

谢谢


推荐阅读