Django过滤查询中每个项的反向关系

2024-06-16 10:14:13 发布

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

所以我有3个模型

class User(models.Model):

class UserQuestions(models.Model):
      user = models.ForeignKey(User)
      question = models.ForeignKey(Question)

class UserAnswers(models.Model):
      user = models.ForeignKey(User)
      question = models.ForeignKey(Question)

我想得到所有用户的列表,但是我想用一个问题字段过滤他们的userquestion_集和useranswer集,然后用userquestions_set和useranswer_集的总和来注释queryset。在

如果我做一些类似的事情:

^{pr2}$

它过滤我的用户,我想过滤他们的userquestions和useranswers集合,以便它们只包含与我的值相等的字段的问题,以便为queryset中的行获得适当的注释。在

任何帮助都是非常感谢的。在


Tags: 用户模型modelmodelsclassquerysetquestionforeignkey
1条回答
网友
1楼 · 发布于 2024-06-16 10:14:13

你在正确的轨道上。在

将对查询求值的结果行类似于:

id | userquestion__id | userquestion__user_id | userquestion__value | usweranswer__id | useranswer__user_id | useranswer__value

对于UserUserQuest和{}的所有组合,其中*__user_id等于{}。因此,当您将&对象放在一起时,您只考虑与Q对象匹配的行。这就是为什么您的注释只适用于问题和答案都符合您的条件的用户。所有其他的User都被过滤掉了。在

Q对象使用|也不会有太大帮助,因为不匹配的条件将被视为误报,反之亦然。在

因此,您唯一的选择是首先加载所有用户,然后加载所有用户,并将正确答案标注为答案计数,然后加载所有用户,并将正确的问题标注为问题计数。最后,您应该用相关的计数来注释用户。在

编辑(示例): 以下内容未经测试,我为我生锈的Python道歉:

^{pr2}$

我们的想法是,我们可以用三个简单的查询来完成所有事情,因为不可能只在一个查询中完成。在

相关问题 更多 >