Как добавить аннотацию с аннотацией Django в QuerySet? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть класс модели с полем status , который может иметь несколько альтернатив, скажем:

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

Затем я хочу аннотировать экземпляры полем active, котороеможет быть либо True, либо False.Экземпляр - active, когда статус - IN [status1, status2].

Версия Django - 1.11.

1 Ответ

0 голосов
/ 12 сентября 2018

Мы можем сделать это с помощью выражения Case [Django-doc] :

from django.db.models import BooleanField, Case, Value, When

MyModel.objects.annotate(
    active=Case(
        When(<b>status__in</b>=['status1', 'status2'], then=Value(True))
        default=Value(False),
        output_field=BooleanField()
    )
)

Обратите внимание, что список условия status__inдолжен содержать ключей вариантов выбора (поэтому левый элемент кортежей, а не правый).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...