django 推迟相关模型查询集中的所有字段

use*_*014 2 django django-queryset

我有一个需要第二个相关模型的查询 Model1.objects.all().select_related("model2__model3")

但我不需要来自模型 2 的任何字段,只需要来自模型 3 的许多不同字段,例如obj.model2.model3.name和其他

如何在不一个接一个明确提及的情况下推迟 model2 中的所有字段?

编辑:模型 1 有外键到模型 2 有外键到模型 3

Ber*_*rte 5

我相信您正在尝试使用.only()queryset 方法,下面的代码片段应该可以工作。

根据 Django 文档:

only() 方法或多或少与 defer() 相反。您使用检索模型时不应延迟的字段调用它。如果您有一个几乎所有字段都需要延迟的模型,则使用 only() 指定补充字段集可以使代码更简单。

Model1.objects.all().only('model2__model3__name').select_related("model2__model3")
Run Code Online (Sandbox Code Playgroud)

使用上面的代码片段,尝试访问任何字段model2将导致数据库访问,而访问model2.model3.name则不会。

这样,来自的所有字段model2都将被推迟。如果你想访问另一个字段,只需将它传递给.only()函数.only('model2__model3__name', 'model2__model3__another')