django - 根据字段上的条件过滤 django 查询集?
问题描述
我有一个这样的模型:
class Story(models.Model):
version = models.PositiveIntegerField(default=1)
# other fields
现在我得到一个id: version
类似的字典:
id_ver_dict = {
# id ver
23: 2,
24: 1,
25: 3
}
我想根据给定的 dict 过滤我的查询集,以使我的数据库中的版本大于id_ver_dict
.
如何在单个查询中过滤它?有没有这样的东西:
Story.objects.filter(id__in=id_ver_dict.keys(), version__gt=id_ver_dict_value)
PS:我正在使用 MySQL
解决方案
基本上你想对多个 ANDed 查询执行 OR。您需要使用Q 对象来执行此操作。您可以编写一个列表推导并使用它functools.reduce
来轻松地做到这一点:
import functools
import operator
id_ver_dict = {
# id ver
23: 2,
24: 1,
25: 3
}
queryset = Story.objects.filter(functools.reduce(operator.or_, [Q(id=obj_id) & Q(version__gt=ver) for obj_id, ver in id_ver_dict.items()]))
推荐阅读
- angular - 如何在 Typescript 中获取泛型类型的属性
- javascript - 如何加载数据以在 ReduxForm 上进行编辑?
- arduino - 在 Arduino 中创建库时出现预期的 unqualified-id 错误
- sql - CTE 是否实现了计算?
- python - Python中的多级分组X轴
- line - openlayers 3中如何根据飞机当前的速度和航向预测未来的轨迹位置并画线?
- bash - 为什么 Ansible 对这些管道命令感到窒息?
- assembly - 为什么更多的数字在 2 的恭维中小于 0
- python - 如何填满树枝?
- ios - UIButton 内的 UIImageView 具有默认填充 - 如何删除?