如何在对象中查找平均日期时间?

2024-05-21 04:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个审批系统。我有一个ApprovalProcess模型。这个模型有end_datebegin_date。结束日期-开始日期是持续时间。我有几个ApprovalProcess模型,我想找出所有ApprovalProcess对象的总平均持续时间。我找不到结束日期和开始日期之间的差异。它给出了一个错误:

TypeError at /approval/logs unsupported operand type(s) for -: 'NoneType' and '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'

Tags: djangoinpy模型datetimedateobjectresponse
2条回答

当查询中的“结束日期”为“无”时,可以进行筛选:

approval_list = ApprovalProcess.objects.filter(user_id=request.user).exclude(end_date=None)

试试这个

更新问题

if approval_object.end_date and approval_object.begin_date:
    delta = abs((approval_object.end_date - approval_object.begin_date).days)

#duration = duration + (review.end_date - review.begin_date).days

相关问题 更多 >