Общая проблема представления django (detailview, get_queryset) - PullRequest
1 голос
/ 25 августа 2011

Существуют общие представления, облегчающие нашу жизнь, но время, потраченное на понимание того, как эти вещи работают, на самом деле делает их труднее. Может быть, это я, но я долго пытался придумать, как это исправить, чтобы я мог сам легко написать представление и двигаться дальше, но я настоял на том, чтобы изучить его.

Я хочу показать пользовательский класс DetailView, код выдает:

'Sculpture' object has no attribute 'filter'

from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView, DetailView
from sculptures.models import Sculpture

class SculptureListView(ListView):
    """docstring for SculptureListView"""
    def get_queryset(self):
        return Sculpture.objects.all() 
class SculptureDetailView(DetailView):
    """docstring for SculptureDetailView"""
    def get_queryset(self):
        sculpture = get_object_or_404(Sculpture, slug=self.kwargs['slug'])
        return sculpture

Я знаю, что требуется одно исправление строки - самое большее, но не могу понять.

А идеи?

Ответы [ 2 ]

8 голосов
/ 25 августа 2011

get_queryset, как следует из названия, должен возвращать набор запросов, а не один объект.

5 голосов
/ 16 ноября 2012

чтобы вернуть один объект, используйте get_object

class SculptureDetailView(DetailView):
    """docstring for SculptureDetailView"""
    def get_object(self):
        sculpture = get_object_or_404(Sculpture, slug=self.kwargs['slug'])
        return sculpture
...