Django Haystack无法索引datetime字段

时间:2016-12-04 14:52:58

标签: python django django-templates django-haystack

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

我的模型是这样的:

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

我的索引类如下:

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

我尝试从prepare字段的索引返回strftime,但它也不起作用

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

但是如果我返回日期时间值的unicode表示,就像

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

或者在我的searchindex中没有使用use_template=False我可以索引文档或对象

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

2 个答案:

答案 0 :(得分:0)

您必须在设置中设置language code

如果没有设置,Django的get_language会返回None并且代码不会指望它。

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

答案 1 :(得分:0)

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

访问Ivan提供的相同链接,如果USE_I10N设置,请检查您的设置。从USE_L10N = False开始USE_L10N = True,您的代码将正常运行。

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

change USE_L10N = True to  USE_L10N = False,