Django get() принимает ровно 2 аргумента (задано 3)

#django #django-views #django-1.3

#django #django-просмотры #django-1.3

Вопрос:

Я пытаюсь использовать универсальный класс DetailView в моем тестовом приложении, и это то, что у меня есть на мой взгляд

* обновленная модель * из этого примера

 class AuthorDetailView(DetailView):

     context_object_name = "author"
     queryset = Author.objects.all()
     slug_field = "id"


    def get_object(self):
        object = super(AuthorDetailView, self).get_object()

        return object
  

в качестве теста

и в моем urls.py файл, который я получил

 ('^author/(d )/$', Author.AuthorDetailView.as_view()),
  

когда я перехожу к http://localhost:8000/author/1 Я получаю следующую ошибку

Ошибка ввода get() принимает ровно 2 аргумента (задано 3)

 Traceback:
File "/Library/Python/2.6/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/Library/Python/2.6/site-packages/django/views/generic/base.py" in view
  47.             return self.dispatch(request, *args, **kwargs)
File "/Library/Python/2.6/site-packages/django/views/generic/base.py" in dispatch
  68.         return handler(request, *args, **kwargs)

Exception Type: TypeError at /author/1/
Exception Value: get() takes exactly 2 arguments (3 given)
  

Я действительно не понимаю, что происходит в base.py.

Ответ №1:

Попробуйте этот urlconf

 from books.views import AuthorDetailView

urlpatterns = patterns('',
    #...
    (r'^authors/(?P<pk>d )/$', AuthorDetailView.as_view()),
)
  

и перейдите к:

 http://localhost:8000/author/1/
  

Комментарии:

1. Хорошая находка. «если pk найден, этот метод выполняет поиск на основе первичного ключа, используя это значение. Если аргумент pk не найден, он ищет аргумент slug и выполняет поиск slug с использованием SingleObjectMixin.slug_field.»

2. Спасибо за помощь, ребята. Если я удалю поиск pk из URL и добавлю значение «id» в slug_field, я снова получу ту же ошибку. Я делаю это неправильно?

3. Вам нужно было бы установить slug_field значение «id» и принять аргумент с именем «slug». (?P<slug>…)

Ответ №2:

Я внес нижеприведенное изменение, и оно сработало.

Обновите панель инструментов отладки до 1.5 или понизьте sqlparse до 0.1.x.

Источник : https://github.com/jazzband/django-debug-toolbar/issues/862 (Большое спасибо пользователю aaugustin с github)