Django Date Filter Weirdness - PullRequest
       5

Django Date Filter Weirdness

0 голосов
/ 08 мая 2011

У меня есть некоторая фильтрация даты в 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 Ответ

3 голосов
/ 08 мая 2011

Вы не фильтруете, используя операторы сравнения.На самом деле вы передаете аргумент ключевого слова методу 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...