Django 使用列表缓存queryset

Django 使用列表缓存queryset,django,django-models,django-queryset,Django,Django Models,Django Queryset,我有一个这样的问题 Row.objects.filter(status=True) 我的同事说:如果你用 list(Row.objects.filter(status=True)) 它将被缓存。这是真的吗 我读到:list()用于执行此操作。评估可能与您的同事谈论的内容相同,如文档中所述,它存储在querysets缓存中,因此无需在每次需要结果时重新评估 有关文件 在新创建的QuerySet中,缓存为空。第一次对查询集求值时——因此,发生数据库查询时——Django将查询结果保存在查询集的缓

我有一个这样的问题

Row.objects.filter(status=True)
我的同事说:如果你用

list(Row.objects.filter(status=True))
它将被缓存。这是真的吗


我读到:list()用于执行此操作。

评估可能与您的同事谈论的内容相同,如文档中所述,它存储在querysets缓存中,因此无需在每次需要结果时重新评估

有关文件

在新创建的QuerySet中,缓存为空。第一次对查询集求值时——因此,发生数据库查询时——Django将查询结果保存在查询集的缓存中,并返回显式请求的结果(例如,如果对查询集进行迭代,则返回下一个元素)。查询集的后续求值将重用缓存的结果


正如您所提到的,使用
列表
是评估queryset的方法之一

评估可能与您的同事所谈论的内容相同,正如文档中所提到的,它存储在queryset缓存中,因此无需在每次需要结果时重新评估

有关文件

在新创建的QuerySet中,缓存为空。第一次对查询集求值时——因此,发生数据库查询时——Django将查询结果保存在查询集的缓存中,并返回显式请求的结果(例如,如果对查询集进行迭代,则返回下一个元素)。查询集的后续求值将重用缓存的结果


正如您所提到的,使用
list
是评估queryset

的正确方法之一,但必须设置为在您第一次使用它时对其进行评估,使用
list
强制过早评估通常没有任何意义(但可能在某些情况下它可能有用)。所以我要说OP的同事是不对的:一般来说,没有理由强迫queryset使用
list
@LudwikTrammer进行评估-没错,我试图避免对同事是否正确发表任何意见,因为我自己有足够的办公室政治:P在我看来,当您需要正确的结果时,最好只对查询集求值,但必须将其设置为在您第一次使用它时对其求值,使用
list
强制过早求值通常没有任何意义(但在某些情况下,它可能会有用)。所以我要说OP的同事是不对的:一般来说,没有理由强迫queryset使用
list
@LudwikTrammer进行评估-没错,我试图避免对同事是否正确发表任何意见,因为我自己有足够的办公室政治:P在我看来,当您需要结果时,最好只评估查询集