У меня проблема с выполнением «исключающих» запросов для таблиц, которые имеют отношение «многие ко многим» через третью таблицу. У меня есть таблица с проектами, таблица с людьми и таблица отношений с флагами "is_green, is_yellow, is_red", например:
class Project(models.Model):
...
class Person(models.Model):
projects = models.ManyToManyField(Project, through='Status')
class Status(models.Model):
person = models.ForeignKey(Person)
project = models.ForeignKey(Project)
is_green = models.BooleanField()
...
Теперь я хочу сделать запрос, возвращающий всех людей, за исключением тех, которые имеют флаг "is_red" в конкретном проекте. Но следующее
Person.objects.exclude(project=p, status__is_red=True)
исключает всех, кто зарегистрирован в проекте p , но имеет статус = красный для любого проекта, в котором он зарегистрирован. Есть ли способ связать второе условие с первым?
Мой подход состоял в том, чтобы напрямую фильтровать таблицу состояния, что, разумеется, работает. Но тогда у меня есть список объектов «Статус» вместо объектов «Персона».