Sales(models.Model):
# ... ommitted fields...
amount = models.DecimalField(...)
date = models.DateTimeField(...)
我使用此查询过滤销售数据与一个月内的总销售额
Sales.objects.all()
.extra(select={'month': 'MONTHNAME(date)'})
.values('month')
.annotate(total=SUM('amount'))
.values('month', 'total')
输出如下:
[
{
"total": 186.0,
"month": "July"
},
{
"total": 278.0,
"month": "August"
}
]
但我想要的是将月份名称格式化为3个字母,只显示如下:'Jul'
和'Aug'
和.extra(select={'month': 'DATE_FORMAT(date, '%b')'})
不起作用。
Django:v1.10 +
数据库:MySQL
答案 0 :(得分:1)
我检查了.extra(select={'month': "DATE_FORMAT(date, '%b')"})
,似乎您需要在%
之前额外b
,这将以3个字母为您提供月份。 Django ticket
对于今天的日期,.extra(select={'month': "DATE_FORMAT(date, '%%b')"})
打印 7月
更好如果您想避免使用extra
并创建数据库无关解决方案,那么您可以使用TruncMonth
sales_data = Sales.objects
.annotate(month=TruncMonth('date', tzinfo=pytz.timezone('Asia/Calcutta')))
print sales_data.month.strftime('%b') # Prints Jul
答案 1 :(得分:0)
很奇怪,但格式化字符串中需要%%。此外,如果连接上的列名不明确,则可能必须指定表(任务)。
tasks = tasks.extra(
select={
'lastModified':
"DATE_FORMAT(%s.lastModified, '%s')" % (
Task._meta.db_table,
'%%m-%%d-%%Y',
),
'dateRequested': "DATE_FORMAT(dateRequested, '%%m-%%d-%%Y')",
'dateCompleted': "DATE_FORMAT(dateCompleted, '%%m-%%d-%%Y')",
},
)