在Django ORM中,如果没有外键,如何执行left

在Django ORM中,如果没有外键,如何执行left,django,django-orm,Django,Django Orm,我在django中有4个模型,如下所示,我在左连接中面临问题,因为并没有外键 A类(型号): id=models.BigAutoField(主键=True) col1=models.CharField(max_length=20,默认值为“”,blank=False,null=False) col2=models.CharField(max_length=20,默认值为“”,blank=False,null=False) ... 类元: db_table=“A” 约束=[ models.Uniq

我在django中有4个模型,如下所示,我在左连接中面临问题,因为并没有外键

A类(型号):
id=models.BigAutoField(主键=True)
col1=models.CharField(max_length=20,默认值为“”,blank=False,null=False)
col2=models.CharField(max_length=20,默认值为“”,blank=False,null=False)
...
类元:
db_table=“A”
约束=[
models.UniqueConstraint(字段=['col1','col2'],name='UX_Col1Col2'),
]
B类(型号):
id=models.BigAutoField(主键=True)
col1=models.CharField(最大长度=150,空白=False,空=False)
...
类元:
约束=[
models.UniqueConstraint(字段=[“col1”],name='UX_col1'),
]
C类(型号):
id=models.BigAutoField(主键=True)
col1=models.ForeignKey(B,on_delete=models.CASCADE,blank=False,null=False)
col2=models.ForeignKey(D,on_delete=models.DO_NOTHING,blank=False,null=False)
...
D类(型号):
id=models.BigAutoField(主键=True)
col1=models.ForeignKey(B,on_delete=models.CASCADE,blank=False,null=False)
...
现在我的sql查询是

从B中选择(某些列)
B.id=C.id上的内部联接C
D.id上的内部联接D=D.id
左连接A.col=B.col和A.col=C.col上的A
我在做左撇子的时候遇到了问题,我就是这样做的

B.objects。选择_相关('C','D'))

如何实现左连接

如果您的
a
模型中没有ForeignKey,我认为您无法使用Django ORM模拟左连接。可能您必须编写一个自定义SQL查询(),如果我添加foreignkey,因为我仍然无法执行left join,该怎么办?如果您在
a
模型中添加外键,可能您可以使用此答案中建议的
Q
对象: