我的问题是:
如何从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中引用,但是我没有在此处包含该尝试,因为它不起作用。
非常感谢任何帮助。谢谢。
答案 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})