Django ListView 和 View 中的继承 class
Inheritance in Django ListView and View class
有人可以解释为什么这不起作用
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 更改为如下视图的子class 时,
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})
代码似乎工作正常。
我从上面 class 得到的错误是 'name sequence is not defined'。
我将不胜感激对此的一些澄清。
提前致谢。
引自文档:
ListView takes two params, one as queryset and second and template name.
现在,如果您尝试在 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)]
简而言之 - 我删除了您用作序列的临时变量。上面的肯定行不通,因为它是一个列表。这个例子只是为了表达观点
现在上面的看起来不太简洁,所以如果您有复杂的查询要执行并使用列表视图显示,请按照下面的示例进行操作。您必须定义一个 get_queryset 方法,它将 return 所需的查询集对象
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)
链接:
有人可以解释为什么这不起作用
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 更改为如下视图的子class 时,
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})
代码似乎工作正常。 我从上面 class 得到的错误是 'name sequence is not defined'。 我将不胜感激对此的一些澄清。 提前致谢。
引自文档:
ListView takes two params, one as queryset and second and template name.
现在,如果您尝试在 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)]
简而言之 - 我删除了您用作序列的临时变量。上面的肯定行不通,因为它是一个列表。这个例子只是为了表达观点
现在上面的看起来不太简洁,所以如果您有复杂的查询要执行并使用列表视图显示,请按照下面的示例进行操作。您必须定义一个 get_queryset 方法,它将 return 所需的查询集对象
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)
链接: