【发布时间】:2020-10-31 08:01:58
【问题描述】:
问题是关于 Django 中的注释。
例如我有以下模型:
class Example(models.Model):
field_1 = PositiveIntegerField()
field_2 = PositiveIntegerField()
并且我想根据 field_1 == field_2 是否使用布尔值 True 或 False 来注释基于此模型的查询集
我设法找到了两个解决方案,这两个都不让我满意。
Example.objects.extra(select={'equal': r' field_1 = field_2'})
使用原始 SQL,以及即将弃用的 extra()。
2)
Example.objects.all()\
.annotate(
equal=
Case(
When(field_1=F('field_2'), then=True),
default=False,
output_field=BooleanField(),
)
)
这非常冗长,并且使查询集慢了 4 倍。
问题是 - 是否可以在 Django ORM 中表达这样的逻辑而不使用 RAW SQL 并且使用更少冗长和更直接的逻辑?
谢谢。
【问题讨论】:
-
@Tariq Yousef 。谢谢伙计,它有帮助
标签: django django-orm