我试图在django中使用重定向视图,但我一直收到此错误:
视图gp_accountant.gp_taxes.views.TaxRateDeleteView没有返回HttpResponse对象。它改为返回None。
我的代码基于this。
任何人都知道问题出在哪里?
这是我的网址文件(路径: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()
答案 0 :(得分:3)
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/en/1.11/ref/class-based-views/generic-editing/#django.views.generic.edit.DeleteView这是删除对象的正确方法,而不是RedirectView
答案 1 :(得分:0)
修改您的观点,
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。
答案 2 :(得分:0)
您不应该重写调度方法。
尝试这样的事情:
class TaxRateDeleteView(RedirectView):
def get_redirect_url(self, *args, **kwargs):
TaxRate.objects.get(id=int(kwargs['pk'])).delete()
return reverse('delete_rate')