django - Django ORM按工作日分组并分别总结每个工作日
问题描述
我无法根据工作日进行查询。
这是我的模型:
class Sell(models.Model):
total_sell = models.IntegerField()
date = models.DateField(auto_now_add=True)
这是我的查询:
weekly_sell = Sell.objects.annotate(
weekday=ExtractWeekDay('date'),
total=Sum('total_sell')
).values(
'weekday',
'total'
)
但我得到的数据不是我的预期。
就像我在表格中有一个条目
Sunday sell 4
Sunday sell 7
Friday sell 10
所以我期待它应该返回这些数据:
[
[
{
"weekday": 7,
"total": 11
},
{
"weekday": 6,
"total": 0
},
{
"weekday": 5,
"total": 10
},
{
"weekday": 4,
"total": 4
},
{
"weekday": 3,
"total": 0
},
{
"weekday": 2,
"total": 0
},
{
"weekday": 1,
"total": 10
},
]
]
但问题是,它没有以我想要的方式返回数据,而是返回这些:
[
[
{
"weekday": 7,
"total": 4
},
{
"weekday": 7,
"total": 5
},
{
"weekday": 5,
"total": 10
},
]
]
我不知道这有什么问题。在这种情况下有人可以帮我吗?
解决方案
在您的查询中,id
首先进行分组。您可以通过打印原始查询来确认这一点:print(weekly_sell.query)
。
这是因为,当您运行注释时,django 会自动按id
模型的字段进行分组。因此,您需要添加.values("<<column>>")
以要求 django ORM 按此列而不是id
.
您应该使用以下查询:
weekly_sell = Sell.objects.annotate(
weekday=ExtractWeekDay('date'),
).values(
'weekday',
).annotate(
total=Sum('total_sell')
).values(
'weekday',
'total'
)
如果您打印出上述查询集的原始查询,您会注意到现在分组没有打开id
,weekday
而是打开了。
推荐阅读
- forms - 如何在 AngularDart 网络应用程序中使用 MDC 组件
- angular - 角度标签云链接修改角度
- java - 如何将 2 个文本字段和至少 3 个复选框中的 1 个绑定到按钮
- c++ - 引用类型的数据成员提供了围绕 const 正确性的“漏洞”
- c# - 使用 SSIS 将 XML Web 服务路由到 azure
- html - 如何将 div 内的跨度推到右侧并使此文本在内部响应
- scala - 在 scala 中加载 JNI 库
- javascript - 将 CSS/HTML 加载器注入我网站的多个部分(html、js、vuejs)
- firebase - Firebase - notificationclick 事件未收到有效负载
- python - 生成随机数列表,使用自定义边界并求和到所需值