1
我有以下查询集属性的CBV:为什么我CBV查询集属性只计算一次
queryset = sorted(
chain(models.Event.objects.filter(is_published=True), models.Seminar.objects.filter(is_published=True)),
key=attrgetter('start_date'), reverse=True)
,因为我希望我的观点在这两种模式工作(返回他们都在我这样做相同的对象列表,分页等)。问题是queryset
始终包含服务器重置后的值。如果我更改管理员中的任何内容,则在重新启动服务器之前,queryset
不会更改。我想这是因为表达式只被评估一次?
通过覆盖get_queryset
方法的工作原理,但我想知道为什么它不能直接将它分配给queryset
属性。
啊,我明白了。 **懒惰**部分是这里的关键。谢谢! – argaen
从技术上讲,这是因为'get_queryset()'调用了queryset.all(),它重新评估查询集,如果self.queryset不是'QuerySet'实例,则不会发生这种情况。分配一个普通的查询集,即使它被评估,也能正常工作。 – knbk