Джанго фильтр по часам - PullRequest
5 голосов
/ 06 июня 2010

Я нашел эту ссылку: http://code.djangoproject.com/attachment/ticket/8424/time_filters.diff и изменил мои файлы django 1.2, добавив туда, что вы можете увидеть там. Но теперь, когда я пытаюсь написать Entry.objects.filter (pub_date__hour = x) - в результате появляется следующая ошибка:

Поле имеет недопустимый поиск: час

Что мне делать еще, чтобы это работало?

(простите за мой английский)

Ответы [ 4 ]

4 голосов
/ 08 июня 2010
Entry.objects.filter(pub_date__hour = x)

не поддерживается с django 1.2 - только год, месяц, день, день недели.

Используйте что-то вроде этого:

Entry.objects.filter(pub_date__regex = '08:00')

или

Entry.objects.filter(pub_date__contains = '08:00')

, который даст вам все объекты Entry с часами (за все годы).

2 голосов
/ 03 ноября 2014

В Django 1.7 добавлена ​​поддержка пользовательских поисков и преобразований. Часовое преобразование реализовано в PostgreSQL следующим образом:

class HourExtract(models.Transform):
    lookup_name = 'hour'
    output_type = models.IntegerField()

    def as_sql(self, compiler, connection):
        lhs_sql, lhs_params = compiler.compile(self.lhs)
        return "EXTRACT(hour FROM %s)" % lhs_sql, lhs_params

models.DateTimeField.register_lookup(HourExtract)

Теперь вы можете выполнять .filter (pub_date__hour__lte = x) и другие подобные запросы по значению часа.

1 голос
/ 29 января 2011

Вероятно, лучше использовать необработанный запрос SQL, например:

Whatever.objects.raw("SELECT * FROM table WHERE TIME(pub_date) LIKE '%%08:30%%' ")
0 голосов
/ 07 июня 2010

Возможно, вы определили pub_date как DateField, но это должно быть DateTimeField? Можете ли вы включить в вопрос свой код определения модели?

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