2016-12-04 75 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 –

相關問題