Python django通过表预取

Python django通过表预取,python,django,Python,Django,我有一个Django模型,它与一个附加列有很多关系: 类字段(models.Model): table=models.ForeignKey(table,on_delete=models.CASCADE,verbose_name=(u“table”),相关的_name=“fields”) supportedLanguages=models.ManyToManyField(语言, 通过“现场俚语”, 通过_字段=('field','language'), 详细名称=(支持的语言), 帮助文本=_(

我有一个Django模型,它与一个附加列有很多关系:

类字段(models.Model):
table=models.ForeignKey(table,on_delete=models.CASCADE,verbose_name=(u“table”),相关的_name=“fields”)
supportedLanguages=models.ManyToManyField(语言,
通过“现场俚语”,
通过_字段=('field','language'),
详细名称=(支持的语言),
帮助文本=_(
u“字段支持的语言(必须是表支持的语言)。”
)
这是我的直通表:

类字段语言(models.Model):
字段=models.ForeignKey(字段,on_delete=models.CASCADE)
语言=models.ForeignKey(语言,on_delete=models.CASCADE)
defaultValue=models.CharField(最大长度为255,空白为真,空为真,详细名称为(默认值)),
帮助文本=_(
u“此语言中此字段的默认值(覆盖字段的默认值)。”)
我想在一个查询中从through表及其语言中检索每个defaultValue

我认为这会起作用:

table=table.objects.get(pk=1)
字段=列表(表.字段.预回迁相关(“supportedLanguages”).all().订单依据(“位置”))
但不幸的是,它没有得到每个关系的defaultValue,只有它的语言。它可以在同一个查询中完成,因为查询已经通过FieldsLanguages来检索外键

你知道我该怎么做吗


谢谢。

直通表与其他表一样,这意味着您可以通过其
外键的相关名称来引用它

table = Table.objects.get(pk=1)
fields = table.fields.prefetch_related("fieldslanguages__language")
                     .order_by("position"))

for field in fields:
    for fl in field.fieldslanguages_set.all():
        print(fl.default, fl.language)

这并不是我真正想要的,但它帮助我构建了我的查询:

table=table.objects.get(pk=1)
字段=表.字段.预取相关(“字段语言集”、“字段语言集”和“语言”).顺序依据(“位置”)
对于字段中的字段:
对于fl in field.fieldslanguages_set.all():
打印(fl.defaultValue,fl.language)
Kevin Christopher Henry的答案的问题是,它将为for循环中的每个字段查询数据库。在这里,它将只发送4个查询

无论如何,谢谢你的帮助