django - 如果项目在 python 列表中,则注释布尔字段
问题描述
我有一个餐厅的应用程序。我有这个模型:
class Product(models.Model):
name = models.CharField(max_length=50)
price = models.PositiveIntegerField()
我有一个名为 TopSelled 的列表,如下所示:
['Beer', 'Burger', ...]
我想聚合一个名为“热门”的布尔字段,具体取决于产品项目是否为“畅销”。
所以我的注释应该是这样的:
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)
推荐阅读
- laravel - 如何检查用户名和密码是否匹配 laravel 7
- ios - iOS 14 上的 GoogleCast 框架崩溃
- java - 为什么Java将方法参数视为其局部变量?
- swift - Swift 通用函数不接受输入
- javascript - PHP没有访问Javascript cookie
- macos - 使用 NSAccessibility API/XCUITest 框架的 MacOS 上的 Firefox 自动化是否可行?
- python - ValueError:重复可能不包含负值
- javascript - 重复反应组件的最佳实践
- r - R 从下一个不相等的值中进行条件减法
- hibernate - 批量更新并返回 JPA/Hibernate 中失败更新的 Id