2016-12-04 5 views
1

Ich verwende django Haystack mit ElasticSearch backend. In meinem Modell habe ich eine DateTimeField, die Probleme verursacht, während rebuilding_indexes.Django Haystack kann das Datetime-Feld nicht indexieren

Mein Modell ist wie folgt:

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

Meine Index-Klasse ist wie:

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

Der Wert i für die bestimmte Instanz in der Schale bekam das Problem schafft ist

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 

Und der Fehler, den ich beim Erstellen von Indizes bekomme, ist

if not language_code_re.search(lang_code): 
     TypeError: expected string or buffer 

Ich versuchte Strftime von Indizes zurückzukehren Feld von vorzubereiten, aber es funktioniert auch nicht

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

aber es funktioniert, wenn ich Unicode-Darstellung des Datetime-Wert wie

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

oder ohne use_template=False in meinem searchindex kann ich die Dokumente oder die Objekte indexieren

Aber ich bin nicht in der Lage, wo zu bekommen Das eigentliche Problem ist. Hilfe wird geschätzt

Antwort

0

Um zu reproduzieren, starten Sie ein neues Projekt mit Djangos Projektvorlage. Ich glaube, dass USE_L10N = True das Problem aufdeckt, obwohl es möglicherweise eine Kombination von Einstellungen ist, die es verursacht.

Besuchen Sie den gleichen Link Ivan gegeben, und überprüfen Sie Ihre Einstellungen, wenn Einstellungen. Machen Sie es USE_L10N = False von USE_L10N = True, und Ihr Code wird funktionieren.

Weitere Informationen finden Sie unter https://code.djangoproject.com/ticket/24569.

change USE_L10N = True to USE_L10N = False, 
+0

Ja, es funktioniert nach dem Ändern der USE_L10N Einstellungen. Danke –

+0

Ja, obwohl Sie noch l10n arbeiten müssen in einem realen Welt-Szenario. – Ivan

0

Sie müssen die language code in Ihren Einstellungen einstellen.

Wenn es nicht gesetzt ist Django get_language gibt None zurück und es gibt Code, der es nicht erwartet.

Weitere Informationen finden Sie unter https://code.djangoproject.com/ticket/24569.

+0

es dort bereits bei der Einrichtung 'LANGUAGE_CODE gesetzt =‚en-us'' –

+0

@rajpreetsingh Sie django Version zu Ihrer Frage hinzufügen können? – Ivan

+0

django Version ist 1.8 –

Verwandte Themen