2012-03-28 8 views
10
gefunden

Ich habe ein Modell:Django Nötigung zu Unicode: Notwendigkeit String oder Puffer, datetime.date

class MyModel(models.Model): 
    id = models.IntegerField(primary_key=True) 
    recorded_on = models.DateField() 
    precipitation = models.FloatField(null=True, blank=True) 

in meinen Ansichten, die ich so eine Frage haben:

import datetime 

def my_view(request): 
    ... 
    format = '%Y-%m-%d' 
    sd = datetime.datetime.strptime(startdate, format) 
    ed = datetime.datetime.strptime(enddate, format) 
    queryset = MyModel.objects.filter((recorded_on__range = (sd, ed))) 
    ... 

Aber wenn ich versuche, und tun etwas mit dem queryset (zB json dump, Anzeige in Vorlage), erhalte ich folgende Fehlermeldung:

coercing to Unicode: need string or buffer, datetime.date found 

ich es wissen muss eine einfache Möglichkeit, dea sein Ich damit, aber ich habe es noch nicht gefunden.

Jede Hilfe würde sehr geschätzt werden.

EDIT:

Ein Beispiel für Daten:

+----+-------------+---------------+ 
| id | recorded_on | precipitation | 
+----+-------------+---------------+ 
| 24 | 1987-07-02 |   20.7 | 
| 33 | 1987-07-11 |   0.4 | 
+----+-------------+---------------+ 
+1

Bitte zeigen Sie die tatsächliche Traceback. Welche Zeile verursacht den Fehler? –

+0

sind Sie bei jeder Änderung versuchen, 'recorded_on' mit Unicode-String mit' + 'Operator zu verketten? Wenn ja, ist die Art und Weise es zu tun "u" eine Zeichenkette "+ str (obj.recorded_on)" – vartec

+0

Meine Rückverfolgung unterscheidet sich etwas vom Post, wie ich es vereinfacht habe - ich vermute, dass dies ein allgemeines Problem ist. Aber die Zeile meines Codes, über die sich django beschwert, ist die Zeile views.py, die zu einer Vorlage rendert. Link hier: http://dpaste.com/722851/. Ich versuchte auch die Abfrage in der Shell und nur versuchen, das Abfrage-Set zu drucken oder zu iterieren gibt den gleichen Fehler. –

Antwort

22

Sie haben nicht den vollständigen Code gezeigt, aber ich vermute, dass das Problem der mit Ihrem Modell __unicode__ Methode. Dies muss eine tatsächliche Unicode-Zeichenfolge zurückgeben - wenn Sie gerade return self.recorded_on tun, die mit dem angegebenen Fehler fehlschlagen wird. Versuchen Sie etwas wie return unicode(self.recorded_on), oder verwenden Sie strftime, um zu Ihrer gewünschten Datumsformatierung zu konvertieren, zum Beispiel self.recorded_on.strftime('%Y-%m-%d').

+1

Perfekt. Vielen Dank. Ich hatte eigentlich keine Ahnung, dass das Problem mit dem Modell sein könnte! –

Verwandte Themen