我有一个带有以下queryset属性的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
属性来了解它无效的原因。
答案 0 :(得分:2)
当您在班级定义事物时会发生这种情况。当定义类本身时,任何代码都会在第一次导入时评估一次。
您通过在其上调用sorted
来明确评估您的查询集,因此它不再是懒惰的。
您了解get_queryset
方法;这正是它的用途。