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

时间:2013-03-16 08:24:48

标签: 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()self._translation背后的想法是让数据库只打一次,而第二次返回存储的属性。

然而,在阅读完文档之后,我不确定代码是否正在执行此操作 - 因为查询仅在真正需要值时才会访问数据库 - 这是在我的代码之后。

正确的方法怎么样?

1 个答案:

答案 0 :(得分:3)

是的,数据库在第一次有人需要该值时被点击。但正如您所指出的,您保存查询,而不是结果。使用list(...)换行查询以保存结果。

顺便说一句,您可以使用cached_property装饰器使其更加优雅。但它不是内置的。它可以找到here。你最终得到:

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