2010-06-06 3 views
5

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

Field has invalid lookup: hour

Что я должен сделать еще, чтобы заставить его работать?

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

+0

Я не совсем уверен, что этот патч предназначен для работы с 1.2. –

ответ

0

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

+0

yes - это DateTimeField – DJPy

4
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') 

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

1

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

Whatever.objects.raw("SELECT * FROM table WHERE TIME(pub_date) LIKE '%%08:30%%' ") 
2

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 = х) и другие подобные запросы на час значения.

+0

Когда я это делаю и пытаюсь отфильтровать с помощью MyModel.objects.filter (date__hour = 8), django говорит, что он ожидает strnig или buffer, как будто date__hour ожидалось как datetime, а не как целое число –

Смежные вопросы