Django查询和翻译模型

时间:2014-10-22 17:31:25

标签: django postgresql

我的应用程序有许多可以有0个或更多翻译的模型。我选择将翻译放在单独的表格中:

MyModel()
    reference = text
    is_deleted = boolean
    updated_on = datetime


MyModelTrans()
    parent = MyModel
    name = text

请注意,API通过is_deleted实现softdelete,并通过updated_on实现增量更新(此处稍作简化)。

我的问题是:有没有办法用Django ORM将整个数据集放在一个单一查询中?我希望所有MyModel实例与其(可选)翻译一起返回。

首先,我想通过简单查询带有select_related到'parent'的MyModelTrans()表来实现这一点,但后来我意识到并非所有 MyModels将有翻译。

感谢您的投入。

1 个答案:

答案 0 :(得分:0)

您应该使用prefetch_related。它用于以有效的方式与模型一起选择相关模型。在这里查看更多。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related

例如,您可以编写以下内容。

MyModel.objects.all().prefetch_related("translations")

您需要在MyModelTrans的ForeignKey定义中设置related_name

parent = ForeignKey(MyModel, related_name="translations")

将执行一个查询以选择模型实例,并执行另一个查询以选择相关字段。