Django预取通过选项卡

2024-10-03 00:24:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

class Field(models.Model):

    table = models.ForeignKey(Table, on_delete=models.CASCADE, verbose_name=_(u"Table"), related_name="fields")
    supportedLanguages = models.ManyToManyField(Language,
                                                through='FieldsLanguages',
                                                through_fields=('field', 'language'),
                                                verbose_name=_(u"Supported language"),
                                                help_text=_(
                                                    u"The language that the field supports (must be a language supported by the table.")
                                                )

这是我的直通表:

^{pr2}$

我想在一个查询中从through表及其语言中检索每个defaultValue。在

我以为这能起到作用:

table = Table.objects.get(pk=1)
fields = list(table.fields.prefetch_related("supportedLanguages").all().order_by("position"))

但不幸的是,它没有给我每个关系的默认值,只得到它的语言。它可以在同一个查询中完成,因为查询已经通过FieldsLanguages来检索外键。在

你知道我该怎么做吗?在

谢谢。在


Tags: thenamefieldfieldsverboseby关系models
2条回答

through表与其他表一样是一个表,这意味着您可以通过其ForeignKeys的相关名称来引用它。在

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)
fields = table.fields.prefetch_related("fieldslanguages_set", "fieldslanguages_set__language").order_by("position")
for field in fields:
    for fl in field.fieldslanguages_set.all():
        print(fl.defaultValue, fl.language)

kevinchristopher Henry的答案的问题是,它将查询for循环中每个字段的数据库。在这里它将只发送4个查询。在

无论如何谢谢你的帮助。在

相关问题 更多 >