Общая проблема представления 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
Другие вопросы по тегам