如何使用 Django ORM 执行外部连接?

问题描述

我有以下型号:

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.is_allocated 
      FROM Allocation RIGHT OUTER JOIN Partner ON Allocation.partner_id=Partner.id

以上 sql 使用 Django ORM 的输出

此处 sql 查询的语法可能有误,但它们提供了总体思路。

我只想将原始 sql 用作最后一个选项。

拜托,有人可以帮忙吗。

解决方法

在 django 中通过 ORM 访问数据非常容易,例如:

allocation = Allocation.objects.get(id=1)
# access to partner object
print(allocation.partner)
print(allocation.partner.partner_name)

allocations = Allocation.objects.all()
for allocation in allocations:
    print(allocation.partner.partner_name)

# or
allocations = Allocation.objects.all().values('partner__id','partner__name','is_allocated')
for allocation in allocations:
    print(allocation['partner__name'])