簡體   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