我有一个类似Django的模型:
from django.db import models
class Person(models.Model):
# ...
last_login = models.DateTimeField(null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True)
我想找到Person
在last_login
的一天之内的所有date_created
。
到目前为止,我有:
from datetime import timedelta
from django.db.models import F
Person.objects.annotate(
duration=F("last_login") - F("date_created")
).filter(duration__lte=timedelta(days=1))
但是当我这样做时,错误的尾端就像:
File ".../lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 1316, in to_python
parsed = parse_datetime(value)
File ".../lib/python3.7/site-packages/django/utils/dateparse.py", line 107, in parse_datetime
match = datetime_re.match(value)
TypeError: expected string or bytes-like object
我不确定自己在做什么错,可能是因为timedelta(days=1)
。
(并且我不认为这是直接的错误),我不确定该查询是否考虑到last_login
可能是None
的事实。
答案 0 :(得分:1)
您可以使用以下方法进行过滤:
from datetime import timedelta
from django.db.models import F
Person.objects.filter(
last_login__lte=F('date_created') + timedelta(days=1)
)
如果last_login
也是None
/ NULL
,则可以返回记录,
from datetime import timedelta
from django.db.models import F, Q
Person.objects.filter(
Q(last_login__lte=F('date_created') + timedelta(days=1)) |
Q(last_login=None)
)