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

时间:2017-03-12 01:27:34

标签: django django-class-based-views django-generic-views

我的问题是:

  • 如何从List对象实例

  • 并将其从我的DeleteView传递给我的get_success_url反向方法......

  • 为了成功呈现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(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()对象。即列表有很多项 - 一个项目有一个列表。

self.request.user传递用户名参数没问题。我尝试了许多排列来捕获list_pk参数无济于事。目前的尝试包围了?? ??是逻辑上对我有意义的那个,但我得到一个错误,说User对象没有列表属性。

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

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

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

1 个答案:

答案 0 :(得分:0)

在基于类的视图中,与基于函数的视图一样,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})