Добавьте подзапрос на annotate со значением поля модели из той же модели в Django

У меня есть следующая модель:

class Job(models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
    name = models.CharField(max_length=255)
    parent_job = models.UUIDField(default=uuid.uuid4)

Теперь мне нужно получить имя родительской модели в annotate.

Я пробовал следующее, но безуспешно:

(
    Job.objects.filter()
    .annotate(
        par_job_name=Subquery(
            Job.objects.filter(id=OuterRef("parent_job")).first().name
        )
    )
    .values("id", "par_job_name")
)
(
    Job.objects.filter()
    .annotate(
        par_job_name=Subquery(
            Job.objects.filter(id=F("parent_job")).first().name
        )
    )
    .values("id", "par_job_name")
)

Как я могу получить par_job_name здесь?

Примечание: Я знаю, что использование перехода от foreignkey к self может быть хорошим способом моделирования, но это существующий код, и я должен пока работать с ним. Поэтому я должен реализовать решение в th

После изучения документации я понял, что использовал OuterRef неправильно. Я должен был сначала создать кверисет, а затем передать его в Subquery, чтобы он мог быть разрешен внешним кверисетом.

parent_job_qs = Job.objects.filter(id=OuterRef("parent_job"))
(
    Job.objects.filter()
    .annotate(
        par_job_name=Subquery(
            parent_job_qs.values('name')
        )
    )
    .values("id", "par_job_name")
)

Примечание: Я все еще буду ждать лучшего ответа в течение некоторого времени. Если я не получу никакого ответа, я отмечу этот ответ как правильный.

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