【问题标题】:Redirect to item page after deleteView in class based views在基于类的视图中删除视图后重定向到项目页面
【发布时间】:2020-03-18 09:57:42
【问题描述】:

我有一个发票页面,每张发票 (factuur) 中都有项目(与 ForeignKey 的关系发票项目)。当我使用基于类的 deleteView 删除其中一个项目时,我想重定向回包含剩余项目的特定发票 ID。

urls.py:

path('factuur/<factuur_id>', views.facturen_detail_view, name='facturen_detail_view'),
path('delete/<int:pk>', views.FactuurItemDeleteView.as_view(), name='delete_factuurItem'),

views.py:

class FactuurItemDeleteView(BSModalDeleteView):
    model = FactuurItems
    template_name = 'delete_fitem.html'
    success_message = 'Succes: factuur item is verwijderd.'
    success_url = reverse_lazy('facturen_detail_view')

所以我想要的是在删除后将其重定向到 /factuur/factuur_id (我在单击删除按钮时所在的位置)。但是我如何重定向,因为我首先需要知道发票 ID(factuur_id)。我不知道如何使用基于类的视图方法来做到这一点。 当success_url如上时,它会尝试使用已删除的item.id重定向到factuur.id,这不是想要的情况。

【问题讨论】:

  • 使用可以为factuur 制作list_view 并重定向到list_view 的url。因为删除记录后重定向到详情页没有意义
  • 实际上我正在删除一项事实。不是事实本身。所以我需要回到factuur本身来查看factuur中剩余的项目。
  • 列出所有事实的网址是什么?
  • 所有事实:path('', views.facturen_view, name='facturen_view'),
  • 单个事实:路径('factuur/',views.facturen_detail_view,name='facturen_detail_view'),

标签: django


【解决方案1】:

为了什么值得,我用 get_succes_url 解决了这个问题:

class FactuurItemDeleteView(BSModalDeleteView):
    model = FactuurItems
    template_name = 'delete_fitem.html'
    success_message = 'Succes: factuur item is verwijderd.'
    #success_url = reverse_lazy('facturen_detail_view')

    # Go to a success_url with argument=factuur_id
    def get_success_url(self):
        factuur_nr = self.get_object().item_factuur
        faktuurtje = Facturen.objects.get(factuurnummer=factuur_nr)
        faktuurtje_id = faktuurtje.id
        return reverse_lazy('facturen_detail_view', kwargs={'factuur_id': faktuurtje_id})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多