使用 where 子句在 Django 上进行内部连接?
Inner join on Django with where clause?
我正在尝试过滤掉 ModelForm 以仅显示与特定用户关联的下拉值。
我把三个 tabled 绑在一起了:
User
, Project
, ProjectUser
.
一个用户可以有多个项目,一个项目可以有多个用户,table ProjectUser
只是User
和[=之间的table 13=],例如
id | project_id | user_id
1 5 1
2 6 2
3 6 1
如何在 Django ORM 中编写以下内部联接查询?
SELECT name
FROM projectuser
INNER JOIN project
ON projectuser.project_id = project.id
WHERE user_id = <request.user here>
当 Django ORM 将 Filter 应用于指定为外键的字段时,Django ORM 理解它是一个相关的 table 并加入它。
Project.objects.filter(projectuser__user=user)
您可以连接多个 table,甚至可以对外键的反向应用过滤器! ForeignKey字段的related_name
可以适当使用
你原创SQL
SELECT name
FROM projectuser
INNER JOIN project
ON projectuser.project_id = project.id
WHERE user_id = <request.user here>
所以我看到你的 SQL,你想从 projectuser
中获取 name
的特定 user
列表。如果是这样,这里是答案
ProjectUser.objects.filter(user_id = user).values_list('name', flat = True)
我看到你接受 Project.objects.filter(projectuser__user=user)
的回答
对于此答案,您的 SQL 应如下所示
SELECT name
FROM project
INNER JOIN projectuser
ON projectuser.project_id = project.id
WHERE projectuser.user_id = <request.user here>
我正在尝试过滤掉 ModelForm 以仅显示与特定用户关联的下拉值。
我把三个 tabled 绑在一起了:
User
, Project
, ProjectUser
.
一个用户可以有多个项目,一个项目可以有多个用户,table ProjectUser
只是User
和[=之间的table 13=],例如
id | project_id | user_id
1 5 1
2 6 2
3 6 1
如何在 Django ORM 中编写以下内部联接查询?
SELECT name
FROM projectuser
INNER JOIN project
ON projectuser.project_id = project.id
WHERE user_id = <request.user here>
当 Django ORM 将 Filter 应用于指定为外键的字段时,Django ORM 理解它是一个相关的 table 并加入它。
Project.objects.filter(projectuser__user=user)
您可以连接多个 table,甚至可以对外键的反向应用过滤器! ForeignKey字段的related_name
可以适当使用
你原创SQL
SELECT name FROM projectuser INNER JOIN project ON projectuser.project_id = project.id WHERE user_id = <request.user here>
所以我看到你的 SQL,你想从 projectuser
中获取 name
的特定 user
列表。如果是这样,这里是答案
ProjectUser.objects.filter(user_id = user).values_list('name', flat = True)
我看到你接受 Project.objects.filter(projectuser__user=user)
对于此答案,您的 SQL 应如下所示
SELECT name FROM project INNER JOIN projectuser ON projectuser.project_id = project.id WHERE projectuser.user_id = <request.user here>