Общая проблема представления django (detailview, get_queryset)
Существуют общие взгляды, облегчающие нашу жизнь, но время, потраченное на понимание того, как эти вещи работают, на самом деле делает их труднее. Может быть, это я, но я долго пытался придумать, как это исправить, чтобы я мог сам легко написать представление и двигаться дальше, но я настоял на том, чтобы изучить его.
Я хочу, чтобы пользовательский класс 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 ответа
Решение
get_queryset
Как следует из названия, должен возвращать набор запросов, а не один объект.
Чтобы вернуть один объект, используйте get_object
class SculptureDetailView(DetailView):
"""docstring for SculptureDetailView"""
def get_object(self):
sculpture = get_object_or_404(Sculpture, slug=self.kwargs['slug'])
return sculpture