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