【发布时间】:2021-06-23 13:52:02
【问题描述】:
我有以下型号:
class Partner(models.Model):
partner_name = models.CharField(max_length=50)
class Allocation(models.Model):
partner = models.ForeignKey(
Partner,
related_name='partner_allocations',
on_delete=models.CASCADE
)
is_allocated = models.BooleanField(default=False)
通过使用 Django ORM,我需要带有列的连接表 ['partner_name', 'partner_id', 'is_allocated']。
所有合作伙伴名称(也不相关),以及分配模型中的相关数据。
SQL = SELECT partner.id, allocation.partner_id, allocation.is_allocated
FROM Partner LEFT OUTER JOIN Allocation ON Partner.id=Allocation.partner_id
或
SQL = SELECT partner.id, allocation.partner_id, allocation.is_allocated
FROM Allocation RIGHT OUTER JOIN Partner ON Allocation.partner_id=Partner.id
上述 SQL 使用 Django ORM 的输出。
这里的 SQL 查询语法可能有误,但它们给出了总体思路。
我只想将原始 SQL 用作最后一个选项。
请,有人可以帮忙。
【问题讨论】:
-
不幸的是,您无法通过使用 ORM(除非您深入了解)(轻松地)执行此连接。您应该考虑使用
prefetch_related- Django docs。虽然这会执行一些额外的查询。 ORM 不直接支持此类连接的主要原因(我相信)是通过多次存储同一个对象来防止过度使用内存。
标签: django django-orm django-select-related