在django-organizations中获取用户所属组织?遇字段返回None问题
解决 Django Organizations 反向获取用户所属组织的问题
你之前尝试的属性命名不对,才会一直返回None。Django Organizations 是通过OrganizationUser中间表来关联用户与组织的,咱们得用正确的反向关联方式来查询:
1. 先获取用户的组织关联记录
默认情况下,OrganizationUser模型里关联User的字段设置了related_name='organization_users',所以你可以直接通过这个属性拿到用户所有的组织关联实例:
# 获取当前登录用户的所有 OrganizationUser 关联对象 user_org_links = loggedInPerson.organization_users.all()
要是你项目里修改过related_name,可以去OrganizationUser模型的user字段定义里确认具体名称,或者用dir(loggedInPerson)查看用户对象上的所有关联属性,找带organization相关的字段。
2. 从关联记录中提取所属组织
拿到关联记录后,就能轻松取出对应的组织了:
# 遍历获取所有完整的 Organization 对象 user_organizations = [link.organization for link in user_org_links] # 或者用 QuerySet 直接查询,更高效(减少数据库查询次数) from organizations.models import Organization user_organizations = Organization.objects.filter(organizationuser__user=loggedInPerson)
为啥之前的尝试会失败?
你用的loggedInPerson.organizations_organizationuser这种带app名称前缀的属性名是错误的,Django不会自动生成这种格式的反向关联。默认如果没设置related_name,反向关联名是模型名小写_set(比如organizationuser_set),但Django Organizations已经给User的反向关联指定了related_name='organization_users',所以直接用这个名称就对了。
内容的提问来源于stack exchange,提问作者chris Frisina
相关产品推荐
相关产品推荐

