Python 如何在django中仅从数据库检索一次属性

Python 如何在django中仅从数据库检索一次属性,python,django,django-queryset,memoization,Python,Django,Django Queryset,Memoization,我的数据库中有一些关系,我这样描述: @property def translations(self): """ :return: QuerySet """ if not hasattr(self, '_translations'): self._translations = ClientTranslation.objects.filter(base=self) return self._translations hasattr()和se

我的数据库中有一些关系,我这样描述:

@property
def translations(self):
    """
    :return: QuerySet
    """
    if not hasattr(self, '_translations'):
        self._translations = ClientTranslation.objects.filter(base=self)
    return self._translations
hasattr()
self.\u translation
背后的思想是让数据库只命中一次,而第二次返回存储的属性

然而,在阅读了文档之后,我不确定代码是否在这样做——因为查询只在真正需要值时才会命中db——这是在我的代码之后


正确的方法是什么样的

是的,当有人第一次需要该值时,DB就会被命中。但正如您所指出的,您保存的是查询,而不是结果。使用
列表(…)
包装查询以保存结果

顺便说一下,您可以使用
cached_属性
decorator使其更加优雅。不过,它不是内置的。可以找到它。你最终会得到:

@cached_property
def translations(self):
    return list(ClientTranslation.objects.filter(base=self))

是的,这就是我想要的,但我只保存查询,而不保存结果,对吗?(我会使用那个装饰器,但我想知道)。顺便说一句,django附带了电池:
来自django.utils.functional import cached_属性
也有同样的功能。