django - 在 Django ORM 中,通过组上的注释过滤对象
问题描述
我有这个模型,我需要过滤同一用户的每日持续时间大于值 X 的所有对象 A。
class A(models.Model):
user = models.ForeignKey(User)
day = models.CharField(choices=["monday", "tuesday" ... "sunday"])
duration = models.FloatField()
解决方案
目前我的解决方案如下,但对我来说似乎很难看:
- 首先,我按用户和日期分组,注释每日持续时间并对其进行过滤
- 然后我再次过滤来自第一个查询的情侣(用户,天)
group_by_user_day = A.objects
.values("user", "day")
.order_by("user", "day")
.distinct()
.annotate(daily_duration=Sum("duration"))
.filter(daily_duration__gt=X)
q_objects = Q()
for item in group_by_user_day:
q_objects |= Q(user=item["user"], day=item["day"])
results = A.objects.filter(q_objects)
推荐阅读
- java - 在服务器上将 Java 11 切换为 Java 8
- javascript - 如果选项是全部,则计算过滤器无
- c# - 如何获取来自 access 数据库的组合框项目的匹配值?
- visual-studio-code - vs代码,如何更改由“构建任务”触发的终端编码
- reactjs - 如何在 React 中循环拖动可拖动滑块
- javascript - 向下滚动时,我的 JS 代码不执行
- java - 是否可以在 GraalVM 下运行 tesseract.js(来自 https://github.com/naptha/tesseract.js),使用 graal.js 在 Java 中进行 OCR?
- flutter - 在AppWebview中颤动:对点击pdf链接做出反应
- javascript - 如何比较和验证数组中任何项的特定属性值与另一个数组的任何字符串值?
- python - 如何生成长度为 N 的随机二进制数 0 或 1 并可选择控制具有 0 或 1 的概率?