2012-03-28 13 views
10

Mam model:Django Użycie przymusu Unicode: string potrzeba lub bufor, datetime.date znaleźć

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

w moich poglądów Mam kwerendy tak:

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))) 
    ... 

Ale gdy próbuję i zrobić coś z queryset (np json, zrzut ekranu w szablonie), pojawia się następujący błąd:

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

wiem, że musi być łatwym sposobem DEA Ja z tym, ale jeszcze go nie znalazłem.

Każda pomoc będzie mile widziana.

EDIT:

Przykładem danych:

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

Proszę podać rzeczywiste informacje zwrotne. Która linia powoduje błąd? –

+0

Czy zmieniasz jakąkolwiek próbę połączenia 'zapisanego' z łańcuchem unicode używając operatora' + '? Jeśli tak, sposobem na zrobienie tego jest "u" ciąg "+ str (obj.recorded_on)" – vartec

+0

Mój traceback różni się nieco od postu, jak to uprościłem - podejrzewam, że jest to ogólny problem. Ale linia mojego kodu, na którą django się skarży, to linia views.py, która renderuje do szablonu. Link tutaj: http://dpaste.com/722851/ .Spróbowałem również kwerendy w powłoce i po prostu próbuje wydrukować lub iterować kwerendy daje ten sam błąd. –

Odpowiedz

22

Nie wykazano pełny kod, ale podejrzewam, że problem jest z __unicode__ metody Twojego modelu. To musi zwrócić aktualny ciąg znaków Unicode - jeśli po prostu robisz return self.recorded_on, który nie powiedzie się z podanym błędem. Wypróbuj coś takiego jak return unicode(self.recorded_on) lub użyj strftime, aby przekonwertować na żądane formatowanie daty, na przykład self.recorded_on.strftime('%Y-%m-%d').

+1

Idealny. Dziękuję Ci. Właściwie nie miałem pojęcia, że ​​problem może dotyczyć modelu! –

Powiązane problemy