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