Получение TypeError с использованием get_queryset () в моих базовых представлениях на основе классов - PullRequest
0 голосов
/ 21 июня 2011

Ошибка говорит:

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

Я подклассифицирую DetailView как:

class MovieDetail(DetailView):
    template_name = 'examples/generic_movie_detail.html'
    template_object_name = 'movie'

    def get_queryset(self):
        movie = get_object_or_404(Movies, actors__name__contains = self.args[0])
        return movie 

и использую URL как:

(r'^movie/detail/(\w+)', MovieDetail.as_view())

Теперь я хочу получить фильмы любого конкретного актера, скажем («Том»), затем я передам Тома через URL как «/ movie / detail / tom».Я разработаю это в моем шаблоне тогда.

Трассировка:

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

Тип исключения: Ошибка типа в / examples / movie / detail / aamir Значение исключения: get () принимает ровно 2 аргумента (дано 3)

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Вы передаете BaseDetailView.get аргументы через вашу группу захвата URL ((\w+)), когда она не принимает аргументы.

class BaseDetailView(SingleObjectMixin, View):
    def get(self, request, **kwargs): #<-- only keyword args

Либо передайте ему аргументы ключевого слова, либо переопределите метод get, чтобы принять *args или ваш конкретный аргумент.

0 голосов
/ 21 июня 2011

Если вы используете подклассы DetailView, попробуйте переопределить get_object, а не get_queryset.

Редактировать: Ответ Юджи Томиты ниже, кажется правильным ответом на ваш вопрос, вам следуетвероятно, используйте, вероятно, используйте self.kwargs['name'] и (r'^movie/detail/(?P<name>\'+)/$', MovieDetail.as_view())

Имейте в виду, что для подробного просмотра вы, вероятно, захотите получить ровно один результат для URL, и вы должны использовать поле уникального идентификатора и "точноеmsgstr "фильтр вместо использования поиска внешнего ключа и использования" содержит ".

...