Фильтр Джанго с двумя ограничениями на связанную модель - PullRequest
1 голос
/ 02 апреля 2010

У меня есть приложение django с такими моделями:

  • A Question модель

  • Модель Answer, с ForeignKey вернуться к вопросу. (Вопрос может есть несколько ответов.)

  • A Flag модель, с ForeignKey для ответ. (Ответ может быть помечен как неуместно.)

Все вышеперечисленное также имеет поле user, определяющее пользователя, который создал этот объект.

Я пытаюсь получить список всех Вопросов с ответами от текущего пользователя, которые были помечены. Я попробовал это:

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

… но я верю, что вернется список Вопросов с ответами текущего пользователя и с ответами, которые были помечены, но не обязательно гарантируют, что это был ответ пользователя, который был помечен.

Есть ли простой способ сделать это? По сути, я хочу, чтобы часть фильтра answer ссылалась на один и тот же ответ на них обоих.

Пожалуйста, дайте мне знать, если что-то неясно.

Ответы [ 2 ]

6 голосов
/ 02 апреля 2010

Запрос делает именно то, что вы хотите, за исключением того, что вы должны фильтровать вопросы, где флаг не null. Связанные фильтры and редактируются вместе, поэтому он отфильтрует все вопросы, на которые есть ответ от конкретного пользователя, а затем отфильтрует набор ответов, помеченных.

Вы также можете поместить эти два критерия в один filter вызов:

Question.objects.filter(answer__user=user, answer__flag__isnull=False)
0 голосов
/ 02 апреля 2010

Как насчет:

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

Редактировать: конечно, это не возвращает набор запросов. И чтобы избежать дублирования вопросов, возможно, оберните список понимания в набор ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...