Позвольте мне перевести ответ Спайка в коды для будущих зрителей. Обратите внимание, что каждое «Make» может иметь от нуля до нескольких «MakeContent»
Если спрашивающий хочет запросить «Сделать» с помощью В МЕДЛЕННО ОДНОМ «MakeContent», который опубликован = True, то второй фрагмент Джейсона Криста отвечает на вопрос.
Фрагмент эквивалентен
makes = Make.objects.select_related().filter(makecontent__published=True).distinct()
Но если спрашивающий хочет запросить «Make» с помощью ALL «MakeContent», который опубликован = True, то после вышеприведенных «make»,
import operator
make_ids = [m.id for m in makes if
reduce(operator.and_, [c.published for c in m.makecontent_set.all()] )
]
makes_query = Make.objects.filter(id__in=make_ids)
содержит требуемый запрос.