Вопрос касается аннотации в Django.
Например, у меня есть следующая модель:
class Example(models.Model):
field_1 = PositiveIntegerField()
field_2 = PositiveIntegerField()
И я хочу аннотировать набор запросов на основе этой модели с помощью логического True
или False
в зависимости от того, удалось ли мне field_1 == field_2
найти 2 решения по этому поводу, оба из них меня не удовлетворяют.
Example.objects.extra(select={'equal': r' field_1 = field_2'})
Используйте Raw SQL и extra()
, которые скоро станут устаревшими.
2)
Example.objects.all()\
.annotate(
equal=
Case(
When(field_1=F('field_2'), then=True),
default=False,
output_field=BooleanField(),
)
)
Что довольно многословно и делает запрос в 4 раза медленнее .
Вопрос - возможно ли express такой лог c в Django ORM без использования RAW SQL и с менее подробным и более простым логом c?
Спасибо.