Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:通过另一个多对多关系访问多对多对象_Django_Django Models_Many To Many_Django Views - Fatal编程技术网

Django:通过另一个多对多关系访问多对多对象

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_

我简化了我的模型,使之更清楚我想做什么

(models.py应用程序内团队)

(models.py应用程序内文档)

我想要实现的是通过首先获取与文档相关联的所有团队,然后从中获取与这些团队相关联的所有用户,来获取与文档相关联的用户列表

到目前为止,我的尝试都是这样的

(view.py应用程序内文档)

错误:“QuerySet”对象没有“users”属性

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使用你提供的模型,我的查询工作正常(我刚刚将它们复制并粘贴到一个新的应用程序中,并进行了尝试)。请注意,多元化很重要-您有
团队
文档
。此外,您还需要将您的应用程序安装在应用程序中,以便添加用户的参考。