Как указать что-то отличное от pk или slug для DetailView - PullRequest
8 голосов
/ 25 апреля 2011

Мне было интересно, можно ли было использовать что-то кроме pk или slug, когда вы используете DetailView в Django 1.3.

Например, у меня сейчас есть:

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

как мой URL. Скажем, я хотел что-то вроде:

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

где имя будет полем в модели. В любом случае можно ли использовать DetailView, чтобы «захватить» нужный объект и передать его моему шаблону?

Ответы [ 2 ]

14 голосов
/ 25 апреля 2011

Слизняк не имеет особого значения в Джанго.Это просто имя поля, которое идентифицирует строку.Если ваш слаг называется как-то еще, например name, просто укажите name в качестве атрибута slug_field в вашем подклассе представления.

Если вам нужно что-то более сложное, вы всегда можете переопределить get_object вкласс просмотра.

0 голосов
/ 29 июня 2016

Вы можете использовать атрибут "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 design http://epydoc.pythondiary.com/generic-views/ (нажмите на подробный вид)

...