Использование фильтра в запросе с 2 полями ManyToMany в Django - PullRequest
0 голосов
/ 08 апреля 2011

Я приложу все усилия, чтобы описать, что я пытаюсь сделать здесь. У меня есть 3 класса:

  • Вопрос
  • QuestionType
  • QuestionTemplate

А отношения таковы:

  • Question <-ManyToMany-> QuestionType
  • QuestionTemplate <-ManyToMany-> QuestionType

Таким образом, запрос находится в методе внутри QuestionTemplate, который возвращает мне список возможных вопросов с тем же типом QuestionType, которые связаны с QuestionTemplate.

Я пробовал: questions = Question.objects.filter(type__in = template.type.all()) Где «шаблон» - это объект QuestionTemplate. Но этот запрос возвращает мне Вопросы, у которых есть хотя бы один QuestionType в списке QuestionType из шаблона. Что я хочу сделать, так это получить одинаковые типы вопросов и в вопросе, и в шаблоне.

Я пробовал много вещей, но не могу заставить это работать, пожалуйста, кто-нибудь спасет меня!

1 Ответ

0 голосов
/ 08 апреля 2011
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)

Довольно неуклюжий, но должен делать то, что вам нужно.

...