Django Haystack 无法索引日期时间字段
Django Haystack can't index datetime field
我正在使用 django Haystack
和 ElasticSearch 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,
我正在使用 django Haystack
和 ElasticSearch 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,