Учебник Django: общие представления. Ошибка атрибута
Я нахожусь в последней части этого учебника.
from django.conf.urls import patterns, include, url
from django.views.generic import DetailView, ListView
from polls.models import Poll
urlpatterns = patterns('',
url(r'^$',
ListView.as_view(
queryset=Poll.objects.order_by('-pub_date')[:5],
context_object_name='latest_poll_list',
template_name='polls/index.html')),
url(r'^(?P<pk>\d+)/$',
DetailView.as_view(
model=Poll,
template_name='polls/detail.html')),
url(r'^(?P<pk>\d+)/results/$',
DetailView.as_view(
model=Poll,
template_name='polls/results.html'),
name='poll_results'),
url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
)
ListView работает, но когда я посещаю URL с DetailView, я получаю.
AttributeError at /polls/2/
Generic detail view DetailView must be called with either an object pk or a slug.
Request Method: GET
Request URL: http://127.0.0.1:8000/polls/2/
Django Version: 1.4.1
Exception Type: AttributeError
Exception Value:
Generic detail view DetailView must be called with either an object pk or a slug.
Exception Location: /home/yasith/coding/django/django-tutorial/lib/python2.7/site-packages/django/views/generic/detail.py in get_object, line 46
Python Executable: /home/yasith/coding/django/django-tutorial/bin/python2
Python Version: 2.7.3
Я не уверен, что я делаю неправильно. Любая помощь будет оценена.
EDIT: добавьте основной urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(admin.site.urls)),
)
Ответы
Ответ 1
Я думаю, что код, который вы разместили выше, не тот, который у вас есть на вашем диске.
У меня была та же проблема, но затем я внимательно изучил оба кода и учебник. Регулярное выражение, которое у меня было в моем коде, было отличным от учебника.
Это был мой код:
url(r'^(?P<poll_id>\d+)/$',-$
url(r'^(?P<poll_id>\d+)/results/$',-$
Это правильное ядро:
url(r'^(?P<pk>\d+)/$',-$
url(r'^(?P<pk>\d+)/results/$',-$
Обратите внимание, что * poll_id * был в предыдущих разделах руководства, но общие представления требуют pk. Также обратите внимание, что учебник верен, и вы отправили правильный код (из учебника.)
Ответ 2
Внимательно ознакомьтесь с учебными пособиями, которые они упомянули, чтобы изменить urlpatterns для использования primarykey вместо question_id.