Django:通过另一个多对多关系访问多对多对象
我简化了我的模型,使之更清楚我想做什么 (models.py应用程序内团队) (models.py应用程序内文档) 我想要实现的是通过首先获取与文档相关联的所有团队,然后从中获取与这些团队相关联的所有用户,来获取与文档相关联的用户列表 到目前为止,我的尝试都是这样的 (view.py应用程序内文档) 错误:“QuerySet”对象没有“users”属性Django:通过另一个多对多关系访问多对多对象,django,django-models,many-to-many,django-views,Django,Django Models,Many To Many,Django Views,我简化了我的模型,使之更清楚我想做什么 (models.py应用程序内团队) (models.py应用程序内文档) 我想要实现的是通过首先获取与文档相关联的所有团队,然后从中获取与这些团队相关联的所有用户,来获取与文档相关联的用户列表 到目前为止,我的尝试都是这样的 (view.py应用程序内文档) 错误:“QuerySet”对象没有“users”属性 associated_users = current_document.items.all().users.all() associated_
associated_users = current_document.items.all().users.all()
associated_users = current_document.items.users.all()
错误:“QuerySet”对象没有“users”属性
associated_users = current_document.items.all().users.all()
associated_users = current_document.items.users.all()
错误:“ManyRelatedManager”对象没有“users”属性
associated_users = current_document.items.all().users.all()
associated_users = current_document.items.users.all()
我走错方向了吗 嗯,是的
current_document.teams.all()
是一个查询集,或多或少是一个团队列表。请求当前的\u document.teams.all().users
是没有意义的,因为queryset本身没有“users”属性,因此会出现错误users
是该查询集中每个团队元素的属性。因此,一种方法是迭代查询集并询问与每个团队相关联的用户
然而,这将是无望的低效——每个团队调用一个数据库。更好的方法是直接询问数据库:告诉我与当前文档相关联的团队中的所有用户。像这样:
User.objects.filter(team__documents=current_document)
我还是很困惑。团队模型与文档模型的关联是从一个文档到另一个团队,而不是相反(我知道这不是最符合逻辑的方法,但我不允许更改模型结构),因此如何过滤团队文档?@agf 1。否,在过滤器表达式中使用实际的模型名称。2.否,使用=查找M2M/FK关系中的单个元素。请参阅。@Finglish您可以从双方访问关系。看到我给agf的链接了吗?好的,不过还没有找到。我按照你的建议尝试了这个过滤器,但我得到了一个错误:无法将关键字“team”解析为field使用你提供的模型,我的查询工作正常(我刚刚将它们复制并粘贴到一个新的应用程序中,并进行了尝试)。请注意,多元化很重要-您有
团队
和文档
。此外,您还需要将您的应用程序安装在应用程序中,以便添加用户的参考。