繁体   English   中英

Django redirectView返回无

[英]Django redirectView returns None

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

视图gp_accountant.gp_taxes.views.TaxRateDeleteView没有返回HttpResponse对象。 它返回None。

我已经根据这个问题编写了代码。

有人知道问题出在哪里吗?

这是我的网址文件(路径: 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()

@FazilZaid几乎正确,您需要返回他的答案的最后一行。 问题是您的dispatch通常不会返回任何内容,因此应返回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的评论

使用重定向视图删除对象是一个坏主意。 您不应该使用这样的get请求删除对象。

您应该使用https://docs.djangoproject.com/zh-CN/1.11/ref/class-based-views/generic-editing/#django.views.generic.edit.DeleteView这是删除对象的正确方法,而不是RedirectView

编辑您的视图,

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。

您不应该覆盖调度方法。

尝试这样的事情:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM