我有一个
User
Account
s、 可能有多个
Unit
在每个
我建立了一个过滤字典并得到了相关的单位:
units = Unit.objects.filter(**unit_filter)
user_dicts = units.values('account__user').distinct()
或者更确切地说:
user_ids = [rec.get('account__user') for rec in
units.values('account__user').distinct()]
所以我可以使用
User.objects.filter(id__in=user_ids)
我不确定,但我在评估
id in
在我看来效率不高。有没有更好的方法从过滤单元中获取唯一用户?
编辑:
我添加了SQL查询(没有对它们进行测试,可能是错误的)来显示我在Django ORM中要做的事情。实际上我想用
JOIN
WHERE
条款。
WITH selected_units AS
(SELECT id, account_id FROM units)
SELECT DISTINCT u.id FROM user u
JOIN account a on a.user_id=u.id
JOIN unit ut ON ut.account=a.id
JOIN selected_units s ON s.id=ut.id;
但是
id_in
WITH selected_units AS
(SELECT id, account_id FROM units)
SELECT DISTINCT u.id FROM user u
JOIN account a on a.user_id=u.id
JOIN unit ut ON ut.account_id=a.id
WHERE ut.id IN (SELECT id FROM selected_units);