2016-12-04 3 views
1

Я использую django Haystack с ElasticSearch backend. В моей модели у меня есть DateTimeField, который создает проблемы при перестройке_индекса.Django Haystack не может индексировать поле datetime

Моя модель выглядит так:

class MyModel(models.Model): 
    action = models.DateTimeField() 

Мой индекс класса, как:

Class MyModelIndex(indexes.SearchIndex, indexes.Indexable): 
    action_time = indexes.DateTimeField(null=True, model_attr="action") 

Значение я получил в оболочке для конкретного экземпляра, которая создает проблемы является

obj = MyModel.objects.get(id=1) 
obj.action 
Out[56]: datetime.datetime(2016, 6, 21, 14, 6, 37, 430691, tzinfo=<UTC>) # result or value of action field 

И ошибка, которую я получаю при создании индексов, -

if not language_code_re.search(lang_code): 
     TypeError: expected string or buffer 

Я попытался вернуться STRFTIME из индексов от подготовки поля, но он также не работает

def prepare_action_time(self, obj): 
     return obj.action.strftime('%Y-%m-%dT%H:%M:%SZ') if obj.action else None 

, но это работает, если я вернусь юникода представление даты и времени Значение как

def prepare_action_time(self, obj): 
     return unicode(obj.action) if obj.action else None 

или без использования use_template=False в моих поисковых индексах Я могу проиндексировать документы или объекты

Но я не могу получить wher Фактическая проблема. Помощь будет оценена

ответ

0

Чтобы воспроизвести, запустите новый проект с использованием шаблона проекта Django. Я считаю, что USE_L10N = True подвергает проблему, хотя это может быть комбинация настроек, вызывающих ее.

Перейдите по той же ссылке, что и Иван, и проверьте свои настройки, если USE_I10N настроек. Сделайте это USE_L10N = False от USE_L10N = True, и ваш код будет работать.

См. https://code.djangoproject.com/ticket/24569 для получения дополнительной информации.

change USE_L10N = True to USE_L10N = False, 
+0

Да, он работает после изменения настроек USE_L10N. Спасибо –

+0

Да, хотя вы все еще должны иметь l10n, работающий в реальном мире. – Ivan

0

Вы должны установить language code в своих настройках.

Если он не установлен, то Django's get_language возвращает None и есть код, который этого не ожидает.

См. https://code.djangoproject.com/ticket/24569 для получения дополнительной информации.

+0

он уже установлен там в настройке 'LANGUAGE_CODE =«ан-us'' –

+0

@rajpreetsingh вы можете добавить Джанго версию на свой вопрос? – Ivan

+0

django version is 1.8 –