Django Haystack 无法索引日期时间字段

Django Haystack can't index datetime field

我正在使用 django HaystackElasticSearch backend。在我的模型中,我有一个 DateTimeField,它在 rebuilding_indexes 时产生了问题。

我的模型是这样的:

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

我的索引 Class 是这样的:

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

对于造成问题的特定实例,我在 shell 中得到的值是

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

我尝试 return 从 prepare 字段的索引中获取 strftime,但它也不起作用

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

但是如果我 return 像

这样的日期时间值的 unicode 表示,它就可以工作
def prepare_action_time(self, obj):
        return unicode(obj.action) if obj.action else None

或者在我的搜索索引中不使用 use_template=False 我能够索引文档或对象

但我无法找到实际问题所在。帮助将不胜感激

您必须在设置中设置 language code

如果没有设置 Django 的 get_language returns None 并且有代码不期望它。

有关详细信息,请参阅 https://code.djangoproject.com/ticket/24569

要重现,请使用 Django 的项目模板启动一个新项目。我相信 USE_L10N = True 暴露了这个问题,尽管它可能是导致它的设置组合。

访问相同的 link Ivan,并检查您的设置是否 USE_I10N 设置。从 USE_L10N = True 变为 USE_L10N = False,您的代码将正常工作。

有关详细信息,请参阅 https://code.djangoproject.com/ticket/24569

change USE_L10N = True to  USE_L10N = False,