python - 如何使用 ManyToManyField 中的公共 ID 数量注释查询集
问题描述
我有以下型号:
class Ingredient(models.Model):
id = models.CharField(primary_key=True, max_length=24)
name = models.CharField(max_length=100)
class Recipe(models.Model):
id = models.CharField(primary_key=True, max_length=24)
name = models.CharField(max_length=100)
ingredients = models.ManyToManyField(to=Ingredient)
以及具有有效成分 ID 的列表,例如:
ing_id_list = ['5d481cf3abe2d800150de7b6', '5c8c05bee3f3391eda4320b2', ...]
我一直在构建一个带有注释字段的查询集,该字段使用常见相关成分 ID 的数量和列表中的 ID 来丰富食谱:
annotated_recipe_queryset = Recipe.objects.annotate(no_of_common_ings=Count(##PLEASE HELP##))
任何人都可以帮忙吗?
解决方案
如果您使用的是 Django>=1.8,则可以使用条件聚合。对于您的示例,查询可能是:
from django.db.models import Count, Case, When, IntegerField
annotated_recipe_queryset = Recipe.objects.annotate(
no_of_common_ings=Count(Case(When(
ingredients__id__in=ing_id_list, then=1), output_field=IntegerField(), )))
推荐阅读
- c++ - 确定是否为特定类型的参数定义了重载函数
- sql - 在 jsonb_array_elements(二维数组)中搜索元素
- javascript - 由于上下文切换,函数可能永远不会被调用吗?
- 2checkout - 使用 2checkout 添加余额
- excel - 设置可见单元格的动态范围
- android - 页面加载后Webview进度条不隐藏
- ubuntu - 构建 i2c 设备控制器
- css - icefaces 堆叠折线图的自定义背景
- reactjs - “i18next:missingKey”同时使用“react-i18next”和“react-router-dom”
- mongodb - 猫鼬模型无法访问正在进行的事务的连接