Сравнение даты и времени в наборе запросов django - PullRequest
1 голос
/ 18 мая 2011

Привет У меня есть форма ввода пользователя, которая принимает дату в формате 2011-05-12.Я хочу запросить результаты, используя Q.Но мое поле базы данных в формате datetime что-то вроде 2011-05-18 08:36:34.Я даю запрос, подобный этому

k = Posts.objects.filter(Q(review_email__contains = user), review_time = datetime(date)), где user - это какое-то имя пользователя, а date - это значение ввода формы

. Если я выполню вышеуказанный запрос, я получаю ошибку ниже

Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: 'module' object is not callable

Может кто-нибудь помочь мне в решении этого.Заранее спасибо

Ответы [ 3 ]

7 голосов
/ 18 мая 2011

Ошибка возникает из-за того, что вы не сделали datetime.datetime, но как только вы исправите это, вы столкнетесь с неверными результатами в вашем запросе.Когда вы приведете datetime.date к объекту datetime.datetime, это будет в полночь.Следовательно, будет соответствовать только Posts, созданный ровно в полночь в этот день.

Вместо этого вы должны сделать следующее:

Post.objects.filter(
     review_email__contains = user, 
     review_time__year=date.year, 
     review_time__day=date.day, 
     review_time__month=date.month,
 )

См. Справочную информацию для получения дополнительной информации.

В примечании вы недействительно нужно использовать Q объект в этом.

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

Если вы просто хотите сравнить даты, вы можете попробовать это

k = Posts.objects.filter (Q (review_email__contains = пользователь), review_time__date = datetime (date) .date ())

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

Как говорится в ошибке, объект 'module' не может быть вызван .datetime - это модуль.То, что вы хотите, это datetime.datetime.

Использование:

k = Posts.objects.filter(Q(review_email__contains = user), review_time = datetime.datetime(date))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...