Django 2多表连接?

时间:2018-04-15 19:27:57

标签: django

Python 3.6 / Django 2

我有一个Profile模型,用于定义和扩展" User模型。我有一个Group模型,用于定义一些内部的app相关组;和,一个ProfileGroupLink模型,用于定义配置文件可能属于的可能组。

让我们说这些表格如下:

    Profile
    ----------
    id              int
    name_last       varchar(32)
    name_first      varchar(32)
    account_number  uuid

    Group
    ----------
    id          uuid
    name        varchar(32)

    ProfileGroupLink
    ----------
    id          int
    groupLnk    uuid    foreign key(Group.id)int
    profileLnk  uuid    foreign key(Profile.account_number)

我有活跃的用户"个人资料"从:

my_profile = Profile.objects.get(user=request.user)

我通常会写一个SQL查询,如:

select Group.name
from Group as Group
inner join Profile as Profile
    on ? = Profile.id
inner join ProfileGroupLink as ProfileGroupLink
    on Profile.id = ProfileGroupLink.profileLnk
    and Group.id = ProfileGroupLink.groupLnk
order by Group.name

并将配置文件ID作为参数传递。我正在查看页面:https://docs.djangoproject.com/en/2.0/topics/db/queries/但我没有获得连接的双下划线语法。

我目前的尝试是:

    groups = Group.objects.all() \
        .filter(GroupList__profile=my_profile.account_number) \
        .filter(GroupList__group=Group__group_id)

但PyCharm标志" Group__group_id"作为一个未解决的参考。我正在导入模型。我如何在Django中这样做?

1 个答案:

答案 0 :(得分:1)

我将假设您想要获取查询的内容是获取属于个人资料的群组

groups = Group.objects.filte(profilegrouplink__profilelnk=my_profile)
请注意,我把所有内容都放在小写中,不需要放入所有连接,也不要使用模型来制作过滤器,使用属性