在 Django 中是否可以对属性装饰器使用预先加载?
我的代码作为示例
class Player(models.Model):
roles = models.ManyToManyField(Role, related_name='players')
@property
def role(self):
return ", ".join([r.name for r in self.roles.all().order_by('name')])
使用该属性输出玩家角色时,每次都会进行一次查询。
实际上,我仍然不知道 eager load 通常如何与 Django 一起工作。我找不到任何关于它的好文档。
谢谢
最佳答案
这是一个术语问题。 Django 文档/源代码不像 SQLAlchemy 那样引用“急切”加载。相反,Django 具有用于查询的 select_related()
和 prefetch_related()
过滤器,这些都记录在 QuerySet API 引用中。
但这是您添加到查询中的内容,而不是声明性属性。因此,在查询 Player
时,您将使用 prefetch_related('roles')
。
关于python - 属性装饰器急切加载和一般使用 Django 的急切加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25126694/