我在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
有人可以帮忙解释这里有什么问题吗? 我很茫然。
感谢。
答案 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
)的情况下进行过滤。