Django 泛型列表视图:上下文中的重复查询集



我正在使用Django(1.9.1)的通用ListView。我自定义了查询集的名称(我称之为content_list)以放在上下文中。但令人惊讶的是,当我查看上下文内容时,我可以看到object_list以及content_list。如果列表非常大,则不是很优化。我怎样才能摆脱object_list?以下是我的观点:

class Home(ListView): #TemplateView
    context_object_name = 'content_list'
    template_name = 'website/index.html'
    paginate_by = CONTENT_PAGINATE_BY
    def get_queryset(self):
        cc_id = self.kwargs.get('cc_id')
        if cc_id != None:
            qs = Content.objects.filter(category=cc_id)
        else:
            qs = Content.objects.all()
        return qs.order_by('-created_on')
    def get_context_data(self, **kwargs):
        context = super(Home, self).get_context_data(**kwargs)
        context['content_category_list'] = ContentCategory.objects.all()
        print(context)
        return context
我很

确定它们都引用了内存中的同一列表。

从文档中:

好吧,如果您正在处理模型对象,这已经为您完成了。当你处理对象或查询集时,Django 能够使用模型类名称的小写版本填充上下文。这是在默认object_list条目之外提供的,但包含完全相同的数据,即publisher_list。

除此之外,即使它们没有引用相同的数据,您也忘记了查询集是延迟执行的,因此如果您从不使用其他列表,则永远不会执行它。

这是设计使然。这不是与数据库的另一种交互,而是第二次引用。

最新更新