如何在QuerySet上添加带有Django注释的注释?

时间:2018-09-12 12:50:53

标签: django django-queryset

我有一个带有 status 字段的模型类,它可能有几种选择,例如:

class MyModel(models.Model):
    status_choices = (
        ('status1', 'status1'),
        ('status2', 'status2'),
        ('status3', 'status3'),
        ('status4', 'status4'),
    )
    status = models.CharField(choices=status_choices)

然后我想用active字段注释实例,该字段可以是TrueFalse。当状态为IN [status1,status2]时,实例为active

Django版本为1.11。

1 个答案:

答案 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条件的列表应包含选项的(因此,元组的左侧项目,而不是右侧的元组)。