2012-03-28 5 views
10

Ho un modello:Django costringe a Unicode: stringa di necessità o di tampone, datetime.date trovato

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

nel mio punto di vista ho una domanda in tal modo:

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

Ma ogni volta che provo e fare qualsiasi cosa con il set di query (ad esempio jSON discarica, mostra a modello), ottengo il seguente errore:

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

so che ci deve essere un modo semplice per Dea Con questo, ma non l'ho ancora trovato.

Qualsiasi aiuto sarebbe molto apprezzato.

EDIT:

Un esempio di dati:

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

Mostrare il traceback attuale. Quale linea sta causando l'errore? –

+0

stai provando a concatenare 'recorded_on' con una stringa unicode usando l'operatore' + '? Se è così, il modo per farlo è "u" una stringa "+ str (obj.recorded_on)' – vartec

+0

Il mio traceback è un po 'diverso dal post, in quanto l'ho semplificato - sospetto che si tratti di un problema generale. Ma la linea del mio codice di cui django si lamenta è la linea views.py che rende al modello. Link qui: http://dpaste.com/722851/. Ho anche provato la query nella shell e provando solo a stampare o iterare il queryset dà lo stesso errore. –

risposta

22

Non hai mostrato il codice completo, ma ho il sospetto che il problema è con il metodo __unicode__ del modello. Questo deve restituire una stringa unicode effettiva - se stai semplicemente facendo return self.recorded_on che fallirà con l'errore dato. Prova qualcosa come return unicode(self.recorded_on) o usa strftime per convertire la formattazione della data desiderata, ad esempio self.recorded_on.strftime('%Y-%m-%d').

+1

Perfetto. Grazie. In realtà non avevo idea che il problema potesse essere con la modella! –

Problemi correlati