Аннотировать логическое поле, если элемент находится в списке Python - PullRequest
2 голосов
/ 25 марта 2019

У меня есть приложение для ресторана.И у меня есть эта модель:

class Product(models.Model):
    name = models.CharField(max_length=50)
    price = models.PositiveIntegerField()

У меня есть список с именем TopSelled, например:

['Beer', 'Burger', ...]

Я хочу объединить логическое поле с именем «Hot», в зависимости от того, является ли элемент продукта«Топ-продать» или нет.

Итак, моя аннотация должна выглядеть примерно так:

Product.objects.all().annotate(if Product.Name in List: HOT = True ELSE Hot = False)

Как мне этого добиться?Thx!

1 Ответ

3 голосов
/ 25 марта 2019

Попробуйте пометить Case:

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

Product.objects.annotate(hot=Case(
        When(name__in=hot_list, then=True), 
        output_field=BooleanField())
    ).filter(hot=True)
...