如何为 DetailView 指定 pk 或 slug 以外的其他内容

Posted

技术标签:

【中文标题】如何为 DetailView 指定 pk 或 slug 以外的其他内容【英文标题】:How to specify something other than pk or slug for DetailView 【发布时间】:2011-08-12 10:55:03 【问题描述】:

我想知道当您在 Django 1.3 中使用 DetailView 时,是否可以使用 pk 或 slug 之外的其他东西。

例如,我目前有:

url(r'^mymodel/(?P<pk>\d+)/$', MyDetailView.as_view())

作为我的网址。假设我想要类似的东西:

url(r'^mymodel/(?P<name>\d+)/$', MyDetailView.as_view())

其中 name 将是模型中的一个字段。无论如何让 DetailView 使用它来“抓取”我想要的对象并将其传递给我的模板?

【问题讨论】:

【参考方案1】:

您可以使用属性“pk_url_kwarg”

urls.py

url(r'^mymodel/(?P<name>\d+)/$', MyDetailView.as_view())

views.py

class MyDetailView(LoginRequiredMixin, DetailView):
    model = ModelName
    pk_url_kwarg = "name" # primary key(to identify object uniquely)
    template_name = "template.html"

供参考查看uml设计http://epydoc.pythondiary.com/generic-views/ (点击详细视图)

【讨论】:

【参考方案2】:

slug 在 Django 中没有任何特殊意义。它只是标识行的字段的名称。如果您的 slug 被称为其他名称,例如 name,只需在您的视图子类中将 name 指定为 slug_field 属性。

如果你需要更复杂的东西,你总是可以在视图类中覆盖get_object

【讨论】:

在这里我需要做的就是覆盖。谢谢! 另请注意,您的 url 行必须如下所示: url(r'^mymodel/(?P\d+)/$', MyDetailView.as_view()) 除了slug_field之外,您还可以设置slug_url_kwarg,这样您的命名参数就不会像用户mpaf建议的那样“slug”。

以上是关于如何为 DetailView 指定 pk 或 slug 以外的其他内容的主要内容,如果未能解决你的问题,请参考以下文章

python 没有PK或Slug的Django Generic DetailView

将 Pk 或 Slug 传递给 Django 中的通用 DetailView?

当指定的对象不存在时,如何从 Django DetailView 重定向?

如何使用当前登录用户作为 Django DetailView 的 PK?

如何为 Django Model PK 使用自定义 Oracle 序列?

如何为Android转换器中的MvxColor指定Hex或RGB颜色