【发布时间】:2022-01-17 21:44:28
【问题描述】:
在我的模型中,我添加了一个简单的 DateTimeField:
expired = models.DateTimeField(default=None)
。该字段的值可以是 None 或 Datetime。
我想过滤已过期的任何数据填充的对象,但是我正在努力寻找合适的过滤器。
我想我尝试了所有 filter / exclude 和 expired__isnull=True / expired=None 的组合,但我再也没有得到确切的数字。
如果字段中有 DateTime,过滤的正确方法是什么?
Django:1.11.16
谢谢。
在我的模型中有 2122 行:
Counter(Obj.objects.filter().values_list('expired'))
Counter({(datetime.datetime(2021, 9, 24, 1, 6, 50),): 1,
(datetime.datetime(2021, 9, 24, 1, 6, 51),): 1,
(datetime.datetime(2021, 9, 24, 1, 6, 32),): 1,
(datetime.datetime(2021, 9, 24, 1, 12, 3),): 1,
(datetime.datetime(2021, 9, 24, 1, 12, 44),): 1,
(datetime.datetime(2021, 12, 4, 1, 31, 25),): 1,
(datetime.datetime(2021, 12, 4, 1, 37, 49),): 1,
(datetime.datetime(2021, 12, 4, 1, 9, 55),): 1,
(None,): 2087,
(datetime.datetime(2021, 12, 4, 1, 37, 52),): 1,
(datetime.datetime(2021, 12, 4, 1, 2, 8),): 4,
(datetime.datetime(2021, 12, 4, 1, 5, 14),): 9,
(datetime.datetime(2021, 9, 28, 0, 43, 51),): 1,
(datetime.datetime(2021, 12, 4, 1, 0, 13),): 7,
(datetime.datetime(2021, 12, 4, 1, 9, 59),): 2,
(datetime.datetime(2021, 12, 3, 17, 25, 46),): 1,
(datetime.datetime(2021, 12, 4, 1, 9, 54),): 1,
(datetime.datetime(2021, 9, 24, 1, 14, 30),): 1})
.
Obj.objects.filter(expired__isnull=False).count() 返回所有行 (2122) ... .
Obj.objects.filter(expired=None).count() 返回 2087 行而不是预期的 35 行。
Obj.objects.exclude(expired=None).count() 返回 2122,所以所有的行。
【问题讨论】:
-
.filter(expired__isnull=False)应该可以解决问题。您究竟检索了哪些不应该检索的行? -
我更新了原来的问题,因为有更多空间。
-
Obj.objects.filter(expired).count()返回什么? -
错误。 expired 未定义。
标签: django python-2.7 django-models