Как сделать запрос с несколькими различными объектами Q?
У меня есть модель предпочтений в моем приложении Django, и я пытаюсь написать запрос, который фильтрует элементы, у которых два предпочтения установлены определенным образом. Предпочтения хранятся по принципу "многие ко многим", поэтому каждый объект имеет несколько предпочтений, связанных с ним.
Для предпочтения 1, я могу проверить:
Team.objects.filter(teampreferencemodel__name='remind_morning', teampreferencemodel__raw_value='a')
Для предпочтения 2, я могу проверить:
Team.objects.filter(teampreferencemodel__name='remind_days_before', teampreferencemodel__raw_value='5')
Моя цель - получить пересечение этих двух запросов. Я думал, что могу сделать что-то вроде:
Team.objects.filter(Q(teampreferencemodel__name='remind_morning', teampreferencemodel__raw_value='a')),
Q(teampreferencemodel__name='remind_days_before', teampreferencemodel__raw_value='5'))
но похоже (я думаю), что Django пытается удовлетворить оба вопроса с помощью одной модели предпочтений команды, вместо того, чтобы найти ту, которая имеет по одному из них.
Есть ли способ оптимизировать этот запрос, с помощью Q или чего-то еще, или мне нужно просто прибегнуть к:
Team.objects.filter(teampreferencemodel__name='remind_morning', teampreferencemodel__raw_value='a').intersection(
Team.objects.filter(teampreferencemodel__name='remind_days_before', teampreferencemodel__raw_value='5'))
или немного лучше:
Team.objects.filter(teampreferencemodel__name='remind_morning', teampreferencemodel__raw_value='a').filter(
teampreferencemodel__name='remind_days_before', teampreferencemodel__raw_value='5'))
Просто кажется, что должен быть лучший способ...