不确定如何使用 Django 执行复杂的查询

Not sure how to execute complex Query with Django

我被困在我正在尝试执行的查询上。我在下面附上了数据模型的图像。本质上,我得到了 6 个 table 与各种关系。这是一个快速摘要:

  1. 一个User可以有很多Projects,每个Expense都绑定到一个特定的项目
  2. 每个项目可以有多个用户,每个用户可以有多个项目,通过一个joined放在一起table - UserProject
  3. 为了指示用户对特定项目的访问级别,将名为 role 的字段添加到 UserProject table - 用户可以是项目的成员或管理员

我想构建的查询是获取登录用户 (request.user) 创建的所有费用以及用户所在 all 项目的所有费用具有来自 UserProject table 的 admin 的角色。

见下图数据模型:

知道我将如何处理该查询吗?

我想我是通过使用 Q 查询解决的

specific_project_users = Expense.objects.filter(
    Q(project__projectuser__user=self.user),
    Q(project__projectuser__role='admin') | Q(user=self.user)
).values("user__id")
users = User.objects.filter(id__in=specific_project_users)

虽然不确定查询的效率如何。

原始 SQL 查询转换为此

SELECT ... 
FROM "accounts_user" 
WHERE "accounts_user"."id" 
IN (SELECT U0."user_id" 
FROM "finances_expense" U0 
INNER JOIN "project" U1 
ON (U0."project_id" = U1."id") 
INNER JOIN "projectuser" U2 ON (U1."id" = U2."project_id") 
WHERE (U2."user_id" = 1 AND (U2."role" = admin OR U0."user_id" = 1)))