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

问题描述 投票:2回答:1

我有一个带有状态字段的模型类,可能有几个选项,比如说:

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。

django django-queryset
1个回答
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条件的列表应包含选项的键(所以元组的左项,而不是右项)。

© www.soinside.com 2019 - 2024. All rights reserved.