如何为DetailView指定其他字段而非pk或slug

9 投票
2 回答
4113 浏览
提问于 2025-04-16 16:23

我在想,在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这个方法。

撰写回答