2016-12-04 78 views
1

我正在使用django HaystackElasticSearch backend。在我的模型中,我有一个DateTimeField,它在rebuilding_indexes时产生问题。Django Haystack无法对日期时间字段进行索引

我的模型是这样的:

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 

,但它的工作原理,如果我返回日期时间值的Unicode表示像

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

或在我的searchindex中没有使用use_template=False我能够索引文档或对象

但我无法获得实际的问题是。帮助将不胜感激

回答

0

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

访问伊万给出的相同链接,并检查您的设置,如果USE_I10N设置。使它USE_L10N = FalseUSE_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的get_language返回None并且有代码不期望它。

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

+0

它已经在设置中设置有'LANGUAGE_CODE =“EN-us'' @rajpreetsingh可以为您的Django版本添加到您的问题 –

+0

? – Ivan

+0

django版本为1.8 –

相关问题