【发布时间】:2018-06-07 07:04:19
【问题描述】:
我有一个这样的查询:
queryset = User.objects.filter(
~Q(pk=self.request.user.pk),
~Q(connections_as_initiator__peer=self.request.user,
connections_as_initiator__stopped=False))
在一个发起者和对等方之间可能有许多连接,但只有一个不是stopped。所以我想要这个查询做的是找出当前用户和被查询的用户之间是否存在当前用户是对等点的活动连接。但这根本不是发生的事情:
SELECT accounts_user.id FROM accounts_user
WHERE (
NOT accounts_user.id = 48
AND NOT accounts_user.id IN (SELECT U1.initiator_id AS col1 FROM connection U1 WHERE U1.peer_id = 48)
AND NOT accounts_user.id IN (SELECT U1.initiator_id AS col1 FROM connection U1 WHERE U1.stopped = FALSE)
);
我在想什么(以及什么给出了预期的结果)是这样的:
SELECT accounts_user.id FROM accounts_user
WHERE (
NOT accounts_user.id = 48
AND NOT accounts_user.id IN (SELECT U1.initiator_id AS col1 FROM connection U1 WHERE U1.peer_id = 48 AND U1.stopped = FALSE)
);
有没有办法使用 ORM 来实现,或者我应该开始使用原始 SQL。我也在考虑注解,但我还不能 100% 确定如何以这种方式实现它。
【问题讨论】:
标签: sql django many-to-many django-orm