我有一个对象对象,设备名为'trandate'。
我想了解今天的日期和数据库日期之间的差异。
然后计算设备的inactive_days大于31的设备数。
这是我的代码。
todays_date = datetime.now()
trandate = request.GET.get('devc_trandate')
inactive_days = todays_date - datetime(trandate)
inactive_devices = Cust.objects.values('name').annotate(inact_devc_count = Count('devc',filter=Q(inactive_days__gte=31)))
但是我出错了。
an integer is required (got type NoneType)
跟踪:
File "C:\Python\Python36\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Python\Python36\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "C:\Python\Python36\lib\site-packages\django\core\handlers\base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\customers\views.py" in DevSummary_more
178. inactive_days = todays_date - datetime(trandate)
Exception Type: TypeError at /summary/more/
Exception Value: an integer is required (got type NoneType)
答案 0 :(得分:1)
错误表明'devc_trandate'
为None。
还有另一种方法:
todays_date = datetime.now()
inactive_date = todays_date - timedelta(days=31)
inactive_devices = Cust.objects.values('name').annotate(inact_devc_count = Count('devc',filter=Q(devc__trandate__lt=inactive_date)))
由于您要获取设备的inactive_days大于31的设备数量,因此可以执行today - 31
来获取日期,然后可以通过检查哪个trandate小于非活动日期来获取非活动设备。日期。
答案 1 :(得分:0)
好像请求中没有'devc_trandate'
参数。因此,在创建数据时间实例时,它的None
会给您该错误。
要创建datatime对象,您还需要至少3个参数分别用于年,月和日。不要以为您可以传递datetime的字符串表示形式来创建对象。您可能要使用strptime()
方法将字符串解析为datetime对象。