我的应用程序有许多可以有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将有翻译。
感谢您的投入。
答案 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")
将执行一个查询以选择模型实例,并执行另一个查询以选择相关字段。