如何为DetailView指定其他字段而非pk或slug
我在想,在Django 1.3中,使用DetailView的时候,除了主键(pk)或者slug,是否可以用其他东西呢?
比如说,我现在的URL是:
url(r'^mymodel/(?P<pk>\d+)/$', MyDetailView.as_view())
假设我想要这样的URL:
url(r'^mymodel/(?P<name>\d+)/$', MyDetailView.as_view())
其中的name是模型中的一个字段。有没有办法让DetailView用这个字段来“获取”我想要的对象,并把它传递给我的模板呢?
2 个回答
1
你可以使用属性 "pk_url_kwarg"
urls.py
url(r'^mymodel/(?P<name>\d+)/$', MyDetailView.as_view())
views.py
class CustomDetailView(LoginRequiredMixin, DetailView):
model = ModelName
pk_url_kwarg = "name" # primary key(to identify object uniquely)
template_name = "template.html"
参考链接: https://ccbv.co.uk/projects/Django/4.1/django.views.generic.detail/DetailView/
14
在Django中,"slug"这个词并没有特别的意思。它只是用来表示一个字段的名字,用来识别数据库中的一行数据。如果你的slug叫别的名字,比如name
,那么在你的视图子类中,只需要把name
指定为slug_field
属性就可以了。
如果你需要做一些更复杂的事情,你可以在视图类中重写get_object
这个方法。