Django日期过滤器古怪

时间:2011-05-08 15:10:52

标签: django date filter

我在django中有一些日期过滤,我只是看不出有什么问题。

我有一个这个领域的模型:

date_of_birth = models.DateField(blank = True, null=True, auto_now=False, auto_now_add=False)

然后我选择所有数据

users = UserDetails.objects.all()

我在数据库中有2行,返回了两个对象

>>> users
[<UserDetails: UserDetails object>, <UserDetails: UserDetails object>]

>>> users[0]
<UserDetails: UserDetails object>

我可以看到每个对象的date_of_birth值

>>> users[0].date_of_birth
datetime.date(1971, 9, 28)

然而,我尝试的任何过滤器总是失败?

>>> users = users.filter(date_of_birth__year >= 1970)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'date_of_birth__year' is not defined

>>> users = users.filter(date_of_birth == datetime.date(1971, 9, 28))
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'date_of_birth' is not defined

>>> users = users.filter(date_of_birth == '1971-09-28')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'date_of_birth' is not defined

有人可以帮忙解释这里有什么问题吗? 我很茫然。

感谢。

1 个答案:

答案 0 :(得分:3)

您不使用比较运算符进行过滤。您正在做的是将关键字参数传递给filter方法。要根据相等性进行过滤,只需执行以下操作:

users = users.filter(date_of_birth=datetime.date(1971, 9, 28))

要使用大于或等于过滤,请使用:

users = users.filter(date_of_birth__year__gte=1970)

也就是说,您将__gte附加到关键字参数。

您还可以在小于或等于(date_of_birth__year__lte),小于(date_of_birth__year__lt)或大于(date_of_birth__year__gt)的情况下进行过滤。