Django 将日期解析为 QuerySet 中的 dd-mm-yyyy
Posted
技术标签:
【中文标题】Django 将日期解析为 QuerySet 中的 dd-mm-yyyy【英文标题】:Django parse date to dd-mm-yyyy in QuerySet 【发布时间】:2020-07-29 11:32:59 【问题描述】:我有以下 QuerySet 来检索 SQL Server 数据库中记录计数的所有日期。
def get_amount_per_day(self):
return self.extra(select='time': 'CONVERT(DATE, starttime)').values(
'time').annotate(amount=Count('starttime')).order_by('time')
输出是:
"time": "2019-03-07T00:00:00",
"amount": 216
,
"time": "2019-03-07T01:00:00",
"amount": 178
但我想将日期解析为07-03-2019
,有人知道我该如何实现吗?
我尝试将日期转换为varchar
,但随后order_by
无法正常工作。它必须是DATE
类型。
【问题讨论】:
【参考方案1】:您可以使用Cast
。例如:
from django.db.models.functions import Cast
from django.db.models import DateField
YourModel.objects.annotate(start_date=Cast('starttime', DateField()))
更新
你可以这样尝试使用database functions
:
from django.db.models.functions import ExtractDay, ExtractMonth, ExtractYear
YourModel.objects.annotate(
year=ExtractYear('starttime'),
month=ExtractMonth('starttime'),
day=ExtractDay('starttime')
).annotate(start_date=F('date')+'-'+F('month')+'-'+F('year')).values('start_date')
未经测试的代码
Based on this answer,你可以这样试试:
YourModel.objects.annotate(start_date=ExpressionWrapper(
Func(F('starttime'), Value('%d-%m-%Y'), function='DATE_FORMAT'), output_field=CharField()
))
【讨论】:
问题不在于将其转换为DateField,它已经是一个DateField。问题是它没有返回想要的格式。 未经测试的代码不适用于 SQL Server,DATE_FORMAT
不是函数。另一个 posibiltiy 返回 2024 而不是 2-3-2019
。它将所有数字加到 2024 年,但我不知道为什么以上是关于Django 将日期解析为 QuerySet 中的 dd-mm-yyyy的主要内容,如果未能解决你的问题,请参考以下文章
将日期时间字符串解析为 Django DateTimeField
Django QuerySet 是不是使用二进制搜索按日期过滤?
Django - 如何将 QuerySet 转换为 Q 对象?