使用Django ORM的表连接

2024-10-02 02:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找出Django-ORM,但我对表连接的等价物有点困惑。在

假设我有以下三种型号,缩写为可读性。”User”是现成的Django用户模型,“AppUser”是存储诸如邮政编码之类的附加配置文件信息的对应模型,“Group”是用户的集合(注意,这个组与身份验证组无关)。每个AppUser与每个用户都有一对一的关系。类似地,每个AppUser还指向该用户所属的组(可以是None)。在

生成我的一个任务组的所有成员。在

我知道我可以使用.appuser_set.all()从组“向后遍历一个级别”到AppUser,但我不知道如何进一步获取相关用户及其电子邮件,而不必像这样以非常重数据库的方式进行迭代:

appUser = AppUser.objects.get(user_id=request.user.id)
group = appUser.group
appUsers = group.appuser_set.all()
emails = []
for x in appUsers:
    emails.append(x.user.email) 

或者,我可以编写一个原始的SQL连接来完成,但怀疑Django ORM是有能力的。 什么是正确和最有效的方法来做到这一点?在

型号:

^{pr2}$

Tags: django用户模型idormgroupallemails
1条回答
网友
1楼 · 发布于 2024-10-02 02:28:05

诀窍是始终从您实际想要获取的模型开始。在本例中,您需要获取电子邮件,这是用户模型上的一个字段。因此,从该模型开始,使用双下划线语法来遵循要分组的关系:

users = User.objects.filter(appuser__group_id=group_id)

在本例中,实际上只需要一个JOIN,因为group_id是AppUser本身的一个字段(它是groupForeignKey的底层db字段)。如果有组名,则需要两个联接:

^{pr2}$

相关问题 更多 >

    热门问题