如何从 DeleteView 中的第二个模型对象引用参数以传递给我的 get_success_url?

How do I reference a parameter from a second model object inside a DeleteView to pass to my get_success_url?

我的问题是:

我的get_success_url是这样的:

url(r'^(?P<username>[a-zA-Z0-0_.-]+)/(?P<list_pk>\d+)/$', 
    views.list_detail, 
    name='listdetail'),

我的 DeleteView url 是:

url(r'^(?P<username>[a-zA-Z0-0_.-]+)/(?P<list_pk>\d+)/delete_item/(?P<pk>\d+)$', 
views.DeleteItemView.as_view(), 
name='deleteitem'),

我的 DeleteView 代码如下:

class DeleteItemView(LoggedInMixin, DeleteView):
model = Item

def get_success_url(self):
    return reverse_lazy(
        'lists:listdetail', 
        kwargs = {'username': self.request.user, 
                  ??'list_pk': self.request.user.list.id ??})

list_pk是我需要传入success_url的参数。它来自相关但独立的 List() 对象。 IE。一个列表有很多项目 - 一个项目有一个列表。

self.request.user 传递用户名参数没问题。我尝试了很多排列来捕获 list_pk 参数,但都无济于事。当前尝试被 ?? 包围??在逻辑上对我来说是有意义的,但我收到一条错误消息,指出 User 对象没有列表属性。

我是基于 class 的视图的新手,所以我确信有一个明显的解决方法,但我还没有找到它。

我的另一个尝试集中在使用 get_context_data 传递列表对象,提取我需要的特定 list_pk 然后在 success_url 中引用它,我没有但是,在此处包括该尝试,因为它没有用。

非常感谢任何帮助。谢谢。

在基于 class 的视图中,与在基于函数的视图中一样,url 参数作为关键字参数传递。要在 CBV 中访问它们,请使用 self.kwargs.get('some_parameter').

class DeleteItemView(LoggedInMixin, DeleteView):
model = Item

    def get_success_url(self):
        list_pk= self.kwargs.get('list_pk')
        # I don't see why you would need a lazy inside a method...
        return reverse('lists:listdetail', 
                       kwargs = {'username': self.request.user, 'list_pk': list_pk})