如果字段值在外部列表中,Django 注释布尔值
Posted
技术标签:
【中文标题】如果字段值在外部列表中,Django 注释布尔值【英文标题】:Django annotate a Boolean if field value is into an external list 【发布时间】:2021-03-08 12:03:34 【问题描述】:想象一下我有这个 Django 模型:
Class Letter(models.Model):
name = models.CharField(max_length=1, unique=True)
还有这个列表:
vowels = ['a', 'e', 'i', 'o', 'u']
我想查询 Letter
注释一个布尔字段,如果 name
值在 vowels
列表中,则为 True
,否则为 False
我做了下一个查询:
from django.db.models import Value, F, BooleanField
letters = Letter.objects.annotate(is_vowel=Value(F('name') in vowels, output_field=BooleanField()))
但是无论我分析什么字母,结果总是False
我在查询中做错了什么,实现预期结果的正确方法是什么?
提前致谢。
【问题讨论】:
【参考方案1】:您可以使用以下查询。 django doc conditional expressions
from django.db.models import Value, BooleanField, Case, When
letters = Letter.objects.annotate(
is_vowel=Case(
When(name__in=vowels, then=Value(True)),
default=Value(False),
output_field=BooleanField()
),
)
【讨论】:
【参考方案2】:Django 查询表达式不支持 in 运算符,但可以使用ExpressionWrapper:
letters = Letter.objects.annotate(
is_vowel=ExpressionWrapper(Q(name__in=vowels), output_field=BooleanField())
)
【讨论】:
以上是关于如果字段值在外部列表中,Django 注释布尔值的主要内容,如果未能解决你的问题,请参考以下文章
Django 管理员。当对象具有布尔字段== True时,如何为列表视图中的每一行添加背景颜色?
如何使 STATIC_URL 在外部 JS 文件(Django)中工作