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

标签 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')])

使用该属性输出玩家角色时,每次都会进行一次查询。

实际上,我仍然不知道 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/

相关文章:

python - 在 OpenCV 中使用 StereoBM 的错误视差图

python - 在 Azure Web 应用程序上部署 React - django 应用程序

python - 在生产模式下从服务站点在 Django 中设置静态文件

python - 奇怪的 django 导入错误

python - 在基于类的 View 中使用@transaction.atomic 保存模型

python - 如何在 Django 管理页面中添加多个自动完成

python - django - 导入错误 : no module named views

python - Python 中的 Unicode 字符串语法

python - tensorflow 中的恢复模型和预测

python - Bokeh django plot 嵌入 : large amount of white space in generated div tag