我有一个带有 status 字段的模型类,它可能有几种选择,例如:
class MyModel(models.Model):
status_choices = (
('status1', 'status1'),
('status2', 'status2'),
('status3', 'status3'),
('status4', 'status4'),
)
status = models.CharField(choices=status_choices)
然后我想用active
字段注释实例,该字段可以是True
或False
。当状态为IN [status1,status2]时,实例为active
。
Django版本为1.11。
答案 0 :(得分:1)
我们可以使用Case
expression [Django-doc]来做到这一点:
from django.db.models import BooleanField, Case, Value, When
MyModel.objects.annotate(
active=Case(
When(status__in=['status1', 'status2'], then=Value(True))
default=Value(False),
output_field=BooleanField()
)
)
请注意,status__in
条件的列表应包含选项的键(因此,元组的左侧项目,而不是右侧的元组)。