Django过滤器对相关模型有两个约束

时间:2010-04-02 15:30:55

标签: django

我有一个django应用程序,模型如下:

  • Question型号

  • Answer模型,带有ForeignKey 回到问题。 (一个问题可以 有多个答案。)

  • 一个Flag模型,其中包含ForeignKey 答案。 (可以标记答案 不合适。)

以上所有内容都有一个user字段,用于定义创建该对象的用户。

我正在尝试获取所有问题的列表,其中包含当前用户已被标记的答案。我试过这个:

Question.objects.filter(answer__user=user).\
                 filter(answer__flag__isnull=False).distinct()

...但我相信这将返回一个问题列表,其中包含当前用户的答案以及已被标记的答案,但不一定能保证这是用户已被标记的答案。

有一种简单的方法吗?基本上,我想让过滤器的answer部分引用它们的相同答案。

如果不清楚,请告诉我。

2 个答案:

答案 0 :(得分:6)

查询完全符合您的要求,但您应该过滤标记 null的问题。链接过滤器and编辑在一起,因此它会过滤掉所有具有特定用户答案的​​问题,然后针对标记的答案过滤该集合。

您也可以将这两个条件放在同一个filter来电中:

Question.objects.filter(answer__user=user, answer__flag__isnull=False)

答案 1 :(得分:0)

怎么样:

questions = [a.question for a in user.answer_set.filter(flag__isnull=True)]

编辑:当然,这不会返回查询集。并且为了防止重复的问题,可以将列表理解包装在set()中。