Установка значения поля annotate из другого связанного дочернего значения

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

пример Модели:

class ModelA(BaseModel):
    name=models.CharField()

class ModelB(BaseModel):
    type=models.CharField(max_length=100, unique=True) #the value will be one of [x, y, z]
    parent = models.ForeignKey('ModelA', related_name='related_models')

class ModelC(BaseModel):
    ext = models.CharField(max_length=100, unique=True)
    model_b = models.ForeignKey('ModelB', related_name='modelc')

примерные значения моделей

modelA = [
    {'id': 1,'name': 'data1'},
    {'id': 2,'name': 'data2'},
    {'id': 3,'name': 'data3'},
    {'id': 4,'name': 'data4'}
]

modelB = [
    {'id': 1,'type': 'y', 'parent_id': 1},
    {'id': 2,'type': 'z', 'parent_id': 1},
    {'id': 3,'type': 'x', 'parent_id': 3},
    {'id': 4,'type': 'z', 'parent_id': 3},
    {'id': 5,'type': 'z', 'parent_id': 2},
]

modelC = [
    {'id': 1, 'ext': 'juststr#1', 'model_b_id': 2},
    {'id': 2, 'ext': 'juststr#2', 'model_b_id': 4},
]

ожидаемый результат:

[
    {'id': 1,'name': 'data1', 'mc_status': True},
    {'id': 2,'name': 'data2', 'mc_status': False},
    {'id': 3,'name': 'data3', 'mc_status': True},
    {'id': 4,'name': 'data4', 'mc_status': False}
]

Я пробовал:

model_a = model_a.annotate(
    mc_status=Case(
        When(
            Q('related_models__type'='z', 'related_models__modelc__isnull'=False),
            then=True
        ),
        default=Value(False),
        output_field=BooleanField()
    )
)
#wrrong result :(

Я не знаю, правилен ли метод, который я пробую, или нет, но очевидно, что результат неправильный. Я думаю, это потому, что второй уровень отношений между таблицами modelA и modelC не один к одному. если кто-нибудь знает, как это сделать или у кого-нибудь есть ссылка, это было бы очень полезно, спасибо

Вернуться на верх