Добавьте подзапрос на 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")
)
Примечание: Я все еще буду ждать лучшего ответа в течение некоторого времени. Если я не получу никакого ответа, я отмечу этот ответ как правильный.