django - 在 django 上计算时间
问题描述
我有以下代码:
def index(request):
events_list = Timesheet.objects.filter(owner = request.user.pk, week = datetime.datetime.now().isocalendar()[1]).order_by('-working_hour')
total_hours_week = Timesheet.objects.annotate(total_hours_per_week=Sum('working_hour')).filter(owner = request.user.pk, week = datetime.datetime.now().isocalendar()[1])
return render(request, "timesheet/index.html", {'events_list': events_list, 'total_hours_week': total_hours_week})
total_hours_week 返回当前错误:
您不能在 sqlite3 中的日期/时间字段上使用 Sum、Avg、StdDev 和 Variance 聚合,因为日期/时间保存为文本。
你知道如何解决吗?
提前谢谢
解决方案
您可以检查当前的数据库引擎是否为 sqlite3,并在需要时以编程方式计算注释:
from django.conf import settings
def index(request):
db_engine = settings.DATABASES['default']['ENGINE']
if db_engine = 'django.db.backends.sqlite3':
total_hours_week = [] # Calculate annotation programmatically
else:
total_hours_week = Timesheet.objects.annotate(total_hours_per_week=Sum('working_hour')).filter(owner = request.user.pk, week = datetime.datetime.now().isocalendar()[1])
events_list = Timesheet.objects.filter(owner = request.user.pk, week = datetime.datetime.now().isocalendar()[1]).order_by('-working_hour')
return render(request, "timesheet/index.html", {'events_list': events_list, 'total_hours_week': total_hours_week})
但是,如果您仅将 sqlite3 用于开发,并且您需要大量使用时间聚合,我强烈建议您为您的开发环境设置一个 PostgreSQL/MySql 服务器,因为它可以为您节省大量时间和长时间的头痛跑。
推荐阅读
- node.js - 如何从 winston@3 记录器输出中删除 [符号] 字段?
- pandas - PySpark:非常大的 spark 数据帧的 Select(col) 或 show()
- javascript - 如何从下拉框中获取数据并在js中添加下一个框
- sql - 使用数据透视表显示学生出勤率
- c# - 将 FileContentResult 与未经授权的结果一起使用
- javascript - 我想使用链接将道具传递到我的用户详细信息页面
- node.js - nodejs - 如何检查使用单元测试测试的代码部分?
- c# - C# JSON-Convert doesn't work with tuples
- javascript - Lint 检查是否在 IntelliJ 中被滥用为分配的 Javascript 相等性
- mysql - MySQL:使用 SQL 找出日期的工作日是否在两个工作日之间