Eri*_*nes 3 python django django-models django-queryset django-annotate
想象一下我有这个 Django 模型:
class Letter(models.Model):
name = models.CharField(max_length=1, unique=True)
Run Code Online (Sandbox Code Playgroud)
还有这个列表:
vowels = ['a', 'e', 'i', 'o', 'u']
Run Code Online (Sandbox Code Playgroud)
Letter我想对注释布尔字段进行查询,True如果name值在vowels列表中,则查询,False否则查询。
我做了下一个查询:
from django.db.models import Value, F, BooleanField
letters = Letter.objects.annotate(
is_vowel=Value(F('name') in vowels, output_field=BooleanField())
)
Run Code Online (Sandbox Code Playgroud)
但是,无论我分析什么字母,结果总是“False
我在查询中做错了什么,实现所需结果的正确方法是什么?” 提前致谢。
小智 6
您可以使用以下查询。django doc 条件表达式
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()
),
)
Run Code Online (Sandbox Code Playgroud)
小智 6
Django 查询表达式不支持in运算符,但您可以使用ExpressionWrapper:
letters = Letter.objects.annotate(
is_vowel=ExpressionWrapper(Q(name__in=vowels), output_field=BooleanField())
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2608 次 |
| 最近记录: |