一般使用Django的属性装饰器渴望加载和急切加载

Pie*_*tro 2 python django django-models python-decorators

在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')])
Run Code Online (Sandbox Code Playgroud)

使用属性输出播放器角色时,每次都会运行查询.

实际上我仍然不知道Django的负载是如何的.我找不到任何关于它的好文档.

谢谢

Jas*_*n S 7

这是一个术语问题.Django docs/source不像SQLAlchemy那样引用"急切"加载.相反,Django具有查询过滤器select_related()prefetch_related()过滤器,这些查询在QuerySet API参考中有记录.

但这是您添加到查询中的内容,而不是声明属性.所以你prefetch_related('roles')在查询时会使用Player.