Skip to main content
 首页 » 编程设计

python之如何从 Django 的数据库中只检索一次属性

2024年08月29日26mfrbuaa

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

@property 
def translations(self): 
    """ 
    :return: QuerySet 
    """ 
    if not hasattr(self, '_translations'): 
        self._translations = ClientTranslation.objects.filter(base=self) 
    return self._translations 

hasattr() 和 self._translation 背后的想法是让数据库只命中一次,而第二次返回存储的属性。

但是,在阅读文档之后,我不确定代码是否这样做了——因为查询只在真正需要值时才访问数据库——这是在我的代码之后。

正确的方法应该是什么样的?

请您参考如下方法:

是的,DB 在有人第一次需要该值时被命中。但是正如您所指出的,您保存的是查询,而不是结果。用 list(...) 包装查询以保存结果。

顺便说一句,你可以使用cached_property 装饰器让它更优雅。不过,它不是内置的。可以查到here .你最终得到:

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