在Django中具有2个ManyToMany字段的查询中使用过滤器

时间:2011-04-07 22:24:46

标签: django filter many-to-many field

我会尽力描述我在这里要做的事情。 我有3个班级:

  • 问题
  • QuestionType
  • QuestionTemplate

关系是:

  • 问题< -ManyToMany-> QuestionType
  • QuestionTemplate< -ManyToMany-> QuestionType

因此,查询位于QuestionTemplate内的一个方法中,该方法为我提供了一个可能与QuestionTemplate相关的QuestionType相同的问题列表。

我试过了:questions = Question.objects.filter(type__in = template.type.all()) 其中“template”是QuestionTemplate对象。 但是这个查询返回了我在模板中的QuestionType列表中至少有一个QuestionType的问题。 我想要做的是在问题和模板中获得完全相同的QuestionTypes。

我尝试了很多东西,但是不能让它起作用,拜托,有人救了我!

1 个答案:

答案 0 :(得分:0)

types = template.type.all()
query = Question.objects
for t in types:
    query = query.filter(type = t)
questions = []
for q in query.select_related('type'):
    ok = True
    for t in q.type.all():
        if t not in types:
            ok = False
            break
    if ok:
        questions.append(q)
save_questions_in_m2m_relations_so_that_you_dont_have_to_repeat_this(questions)

非常笨拙,但应该做你需要的。