Наследование в классе Django ListView и View [дубликат]
На этот вопрос уже есть ответ здесь:
Может кто-нибудь объяснить, почему это не работает
class MansionDesign(Listview):
sequence = Design.objects.filter(design_type__name='maisonette').order_by('created_at').reverse()
queryset = [sequence[i:i + 3] for i in range(0, len(sequence), 3)]
template_name = 'designs/mansions.html'
Но когда я изменяю вышеупомянутый класс на подкласс вида, как показано ниже,
class MansionDesign(View):
def get(self, request):
sequence = Design.objects.filter(design_type__name='maisonette').order_by('created_at').reverse()
queryset = [sequence[i:i + 3] for i in range(0, len(sequence), 3)]
return render(request, 'designs/mansions.html', {'object_list': queryset})
Код, кажется, работает просто отлично. Ошибка, которую я получаю от приведенный выше класс- "последовательность имен не определена". Я был бы признателен за некоторые разъяснения по этому вопросу. Заранее спасибо.
1 ответ:
Цитаты из документов:
ListView принимает два параметра, один как queryset и второй и имя шаблона.
Теперь, если вы попытаетесь определить что-то еще в подклассе ListView, вы получите ошибку. Если вы сделаете что-то вроде ниже:
Короче говоря, я удалил переменную темпоральности, которую вы использовали в качестве последовательности. Вышеупомянутый определенно не будет работать, потому что это список. Этот пример был просто для того, чтобы передать сутьqueryset =[list(Design.objects.filter(design_type__name='maisonette').order_by('created_at').reverse())[i:i + 3] for i in range(0, len(list(Design.objects.filter(design_type__name='maisonette').order_by('created_at').reverse())), 3)]
Теперь вышеприведенное не кажется если у вас есть сложные запросы, которые вы хотите выполнить и показать с помощью listview, следуйте приведенным ниже примерам. Вы должны определить метод get_queryset, который вернет требуемый объект queryset
class PublisherBookList(ListView): template_name = 'books/books_by_publisher.html' def get_queryset(self): self.publisher = get_object_or_404(Publisher, name=self.args[0]) return Book.objects.filter(publisher=self.publisher)
Ссылки: