【问题标题】:How to specify something other than pk or slug for DetailView如何为 DetailView 指定 pk 或 slug 以外的其他内容
【发布时间】: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 使用它来“抓取”我想要的对象并将其传递给我的模板?

【问题讨论】:

    标签: python django django-views django-1.3


    【解决方案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”。
      猜你喜欢
      • 2015-11-04
      • 2013-05-03
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 2012-08-08
      • 2015-12-11
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多