[英]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.