如果item在python列表中,则注释布尔字段

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

我有一个餐厅的应用程序。我有这个模型:

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

我有一个名为TopSelled的列表,如下所示:

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

我想聚合一个名为'Hot'的布尔字段,具体取决于产品是否为“top-sell”。

所以我的注释应该是这样的:

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

我怎样才能做到这一点?谢谢!

django django-orm
1个回答
3
投票

尝试使用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)
© www.soinside.com 2019 - 2024. All rights reserved.