gpt4 book ai didi

Django cached_property 没有被缓存

转载 作者:行者123 更新时间:2023-12-05 02:26:15 25 4
gpt4 key购买 nike

我的模型中有以下内容:

class Tag(models.Model):
name = models.CharField(max_length=255)
type = models.CharField(max_length=1)
person = models.ForeignKey(People, on_delete=models.CASCADE)

class People(models.Model):
name = models.CharField(max_length=255)

@cached_property
def tags(self):
return Tag.objects.filter(person=self, type="A")

我希望当我这样做时:

person = People.objects.get(pk=1)
tags = person.tags

这将导致 1 db 查询 - 仅从数据库中获取人员。但是,它会连续产生 2 个查询——标签表一直在被查询,即使这应该是缓存的。什么会导致这个?我没有正确使用 cached_property 吗?

简化模型以说明这种情况。

最佳答案

您修饰的 tags() 方法返回一个尚未评估的 queryset。 (在 Django's documentation 中阅读有关何时评估查询集的更多信息)。要缓存查询结果,您必须首先强制查询集评估对象列表:

class People(models.Model):
name = models.CharField(max_length=255)

@cached_property
def tags(self):
return list(Tag.objects.filter(person=self, type="A"))

关于Django cached_property 没有被缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73990262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com