如果项目在 python 列表中,则注释布尔字段
Annotate Boolean field if item is in a python list
我有一个餐厅应用程序。我有这个模型:
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)
我怎样才能做到这一点?谢谢!
尝试使用 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)
我有一个餐厅应用程序。我有这个模型:
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)
我怎样才能做到这一点?谢谢!
尝试使用 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)