Django ORM аннотирует запрос

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

 query_obj = MySecurity.objects.filter(
            valid_data=True
        ).values(
            "id",
            "rate",
        ).annotate(
            rating_val=Subquery(
                MySecurity.object.order_by("-date_of_credit")
                .values("credit_code")[:1]
                ),
            )
        )

Я хочу обработать мой rating_val, который будет массивом. Я пробовал передавать результат подзапроса в функцию типа:

   annotate(
            rating_val=myFun(Subquery(
                MySecurity.object.order_by("-date_of_credit")
                .values("credit_code")[:1]
                )),
            )
        )

Но я не могу получить доступ к значению подзапроса.

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

При использовании подзапроса вам нужно сообщить Django, как внутренний запрос связан с внешним, и Django предоставляет OuterRef для помощи в фильтрации внутреннего запроса.

Приведенный ниже пример взят из Django's doc

newest = Comment.objects.filter(post=OuterRef('pk')).order_by('-created_at') Post.objects.annotate(newest_commenter_email=Subquery(newest.values('email')[:1]))

В вашем коде вы сделали подзапрос на self без указания условий фильтрации, что приводит к аннотированию одного и того же значения для каждой строки запроса. И трудно понять, как на самом деле вы хотите, чтобы подзапрос был связан с внешним запросом.

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