Django redirectView returns None

Django redirectView returns None

我正在尝试在 Django 中使用重定向视图,但我一直收到此错误:

The view gp_accountant.gp_taxes.views.TaxRateDeleteView didn't return an HttpResponse object. It returned None instead.

我的代码基于 this question

谁知道问题出在哪里?

这是我的 url 文件(路径:get-paid/gp_accountant/gp_taxes/urls.py):

app_name = 'gp_taxes'
urlpatterns = [
    url(r'^$', TaxesListView.as_view(), name='list'),
    url(
        r'^delete_rate/(?P<pk>\d+)/$',
        TaxRateDeleteView.as_view(pattern_name='accountant:gp_taxes:update'),
        name='delete_rate'
    ),
]

TaxRateDeleteView:

class TaxRateDeleteView(RedirectView):
    def dispatch(self, request, *args, **kwargs):
        TaxRate.objects.get(id=int(kwargs['pk'])).delete()

编辑您的观点,

class TaxRateDeleteView(RedirectView):
    def dispatch(self, request, *args, **kwargs):
        TaxRate.objects.get(id=int(kwargs['pk'])).delete()
        return super(TaxRateDeleteView,self).dispatch(request, *args, **kwargs)

在视图的调度方法上调用 super。

@FazilZaid 几乎正确,您需要 return 他回答的最后一行。问题是你的 dispatch 没有 return 一般它应该 return HttpResponseRedirect 所以要让它与 super 调用一起工作你需要提供 success_url 在您看来

class TaxRateDeleteView(RedirectView):
    success_url = # <- your url here

    def dispatch(self, request, *args, **kwargs):
        TaxRate.objects.get(id=int(kwargs['pk'])).delete()
        return super(TaxRateDeleteView,self).dispatch(request, *args, **kwargs)

也根据@Alasdair 的评论

Using a redirect view for deleting objects is a bad idea. You should not be deleting objects with get requests like this.

您应该使用 https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/#django.views.generic.edit.DeleteView 来删除对象,而不是 RedirectView

您不应该重写调度方法。

试试这样的方法:

class TaxRateDeleteView(RedirectView):
    def get_redirect_url(self, *args, **kwargs):
        TaxRate.objects.get(id=int(kwargs['pk'])).delete()   
        return reverse('delete_rate')