django - Django 查询集获取相关字段名称以过滤聚合总和
问题描述
在我的 models.py 中,我有以下示例:
**Orders**
id
product
total_gross
**Payments**
id
status
order_ID
如果付款状态得到确认,我正在创建以下查询集以获取总金额。所以我使用以下内容:
week_order_total = Order.objects.prefetch_related('payments').filter(created__range=(week_start_date, week_end_date)).filter(payments.status='confirmed').aggregate(Sum('total_gross'))['total_gross__sum']
我收到以下错误:
关键字不能是表达式
解决方案
过滤payments.status
无效。您可以使用两个连续的下划线 ( __
) 过滤相关模型:
week_order_total = Orders.objects.filter(
created__range=(week_start_date, week_end_date),
payments__status='confirmed'
).aggregate(Sum('total_gross'))['total_gross__sum']
使用.prefetch_related(…)
[Django-doc]没有多大意义,因为.prefetch_related
仅当您Orders
在此处获取对象并希望在 Django/Python 级别访问相关对象时才有效。但是在这里你在数据库中聚合,所以 Django 将在 SQL 查询中移动聚合。
注意:通常 Django 模型被赋予一个单数名称,所以
Order
而不是.Orders
推荐阅读
- twitter-bootstrap - 将 azure cdn 与 asp net core 网站一起使用时被 CORS 阻止的引导字体
- javascript - 为什么我的数组是空的?React 读取 json api
- go - golang中的多维数组
- r - 将来自闪亮输入的 dplyr 过滤条件传递给函数
- eclipse - 在 Python 3(在 Pydev 下)如何在包中正确编写导入
- javascript - 自定义静态路由不起作用
- android - 我想用 EditText 设计一个 OTP 屏幕
- jekyll - Jekyll `site.posts` 在将自定义域与 Github 页面合并后显示为空
- python - Django Queryset 查找日期之间的数据
- android - 如何从活动类操作的活动中运行位置请求权限扩展了 ActivityGroup