Как получить аннотированное поле с помощью дочерней модели в Django?

У меня проблема с получением поля Annotate в Django(DRF).

Например, есть две модели под названием AA, BB.

class AA(models.Model):
   name = models.CharField()

class BB(models.Model):
   parent = models.ForeignKey(AA, related_name="BB")
   name2 = models.CharField()

Затем я хочу получить список AA, в котором поле аннотации называется status.

Условием status является word(provided by client)=name2 Например,

[
  {
     name: "aaa1",
     status: True,  // if "aaa1" in AA has the word
  },
  {
     name: "aaa2",
     status: False,  // if "aaa2" in AA doesn't have the word
  }
]

Поэтому я ввел следующий код в файл views.py,

queryset = (AA.objects.prefetch_related("BB").annotate(
            status=Case(
               When(BB__name2=word, then=Value(True)),
               default=Value(False),
               output_field=BooleanField()
               )
            ))

но получились следующие результаты. (Если слово "bbb1")

[
  {
     name: "aaa1",
     status: True,  // "bbb1" whose parent is "aaa1"
  },
  {
     name: "aaa1",
     status: False,  // "bbb2" whose parent is "aaa1"
  },
  {
     name: "aaa1",
     status: False,  // "bbb3" whose parent is "aaa1"
  },
  {
     name: "aaa2",
     status: True,  // "bbb1" whose parent is "aaa2"
  }
]

Я хочу узнать, имеет ли хотя бы одна дочерняя модель (BB) name2 с точки зрения родителя (AA), и она возвращает список всех дочерних моделей.

Что мне делать?

Решено с помощью Exists и OuterRef в annotate.

queryset = (AA.objects.annotate(
               status=Exists(
                  BB.objects.filter(parent=OuterRef("id"), name2=word)
               )
            ))
Вернуться на верх