python - 如何在对象中找到平均日期时间?
问题描述
我创建了一个审批系统。我有一个ApprovalProcess
模型。该模型具有end_date
和begin_date
。end_date - begin_date 是持续时间。我有几个 ApprovalProcess 模型我想找出所有 ApprovalProcess 对象的总平均持续时间是多少。我找不到 end_date 和 begin_date 之间的区别。它给出了一个错误:
TypeError at /approval/logs 不支持的操作数类型 -: 'NoneType' 和 'datetime.datetime'
我该怎么做?
模型.py
class ApprovalProcess(models.Model):
...
begin_date = models.DateTimeField(null=True)
end_date = models.DateTimeField(null=True)
...
视图.py
def log_records(request):
...
approval_list = ApprovalProcess.objects.filter(user_id=request.user)
delta = 0
approval_list = ApprovalProcess.objects.filter(customer__company=request.user.company)
for approval_object in approval_list:
delta = abs((approval_object.end_date - approval_object.begin_date).days)
...
追溯
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/approval/logs
Django Version: 3.1.4
Python Version: 3.8.8
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'register',
'customer',
'financial_analysis',
'ocr',
'core',
'approvals',
'crispy_forms',
'ckeditor',
'rest_framework',
'requests',
'ckeditor_uploader',
'django_filters',
'activity_log',
'djmoney',
'djmoney.contrib.exchange']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\USER\OneDrive\Documents\GitHub\otc\myvenv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\USER\OneDrive\Documents\GitHub\otc\myvenv\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\USER\OneDrive\Documents\GitHub\otc\approvals\views.py", line 501, in log_records
delta = abs((approval_object.end_date - approval_object.begin_date).days)
Exception Type: TypeError at /approval/logs
Exception Value: unsupported operand type(s) for -: 'NoneType' and 'datetime.datetime'
解决方案
您可以在查询中的 end_date 为 None 时进行过滤:。
approval_list = ApprovalProcess.objects.filter(user_id=request.user).exclude(end_date=None)
推荐阅读
- php - 在 Laravel 8.x 中全局存储键/值对
- web - 得到`您的请求被阻止。创建新工作流时缺少功能标志:[ModelVisualDetector]`
- typescript - 如何使用接口键入函数参数?
- c# - DataGridView 单元格焦点
- java - 基于字体大小的 JTextArea 中每行中的最大字符数
- azure-devops - Microsoft.IdentityModel.Clients.ActiveDirectory 未在 Azure DevOps PowerShell 发布管道上加载
- python-3.x - 改装时多处理卡在 ARMAX 上
- powerpoint - 退出前需要在PowerPoint中保存钢笔工具绘图
- php - SQL 两个日期范围,范围内具有特定的“DAY”
- android - 无法将不可为空的 LiveData 值设置为 null