我有三个模型(A、B、C):
class A(models.Model):
url = models.URLField()
uuid = models.UUIDField()
name = models.CharField(max_length=400)
id = models.IntegerField()
class B(models.Model):
user = models.ForeignKey(C, to_field='user_id',
on_delete=models.PROTECT,)
uuid = models.ForeignKey(A, to_field='uuid',
on_delete=models.PROTECT,)
我希望使用Django ORM执行以下SQL查询:
SELECT A.id, COUNT(A.id), COUNT(foo.user)
FROM A
LEFT JOIN (SELECT uuid, user FROM B where user = '<a_specific_user_id>') as foo
ON A.uuid = foo.uuid_id
WHERE name = '{}'
GROUP by 1
HAVING COUNT(A.id)> 1 AND COUNT(A.id)>COUNT(foo.user)
我的问题主要是关于LEFT JOIN。我知道可以通过检查表B上的null字段来形成一个LEFT JOIN:
A.objects.filter(name='{}', b__isnull=True).values('id', 'name')
但是我该如何在特定的子查询上使用LEFT JOIN
?
我尝试使用Subquery()
,但它似乎只会填充最终的WHERE
语句,并没有将我的自定义子查询传递到LEFT JOIN
中。