2012-03-28 33 views
10

我有一个模型:Django的胁迫为Unicode:需要字符串或缓冲区,datetime.date发现

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

我有这样一个查询:

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

但每当我试着做与查询集东西(如JSON转储,在模板显示),我收到以下错误:

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

我知道必须有一个简单的方法来DEA我有这个,但我还没有找到它。

任何帮助将不胜感激。

编辑:

数据的一个例子:

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

请显示实际回溯。哪条线路导致错误? – 2012-03-28 15:18:28

+0

你是否试图用'+'运算符将'recorded_on'与unicode字符串连接起来?如果是这样,做到这一点的方式是'u'一个字符串“+ str(obj.recorded_on)' – vartec 2012-03-28 15:23:32

+0

我的回溯与帖子有些不同,因为我简化了它 - 我怀疑这是一个普遍问题。但是我Django抱怨的代码行是呈现模板的views.py行。链接在这里:http://dpaste.com/722851/。我也尝试了在shell中的查询,只是试图打印或迭代查询集给出了相同的错误。 – 2012-03-28 15:30:51

回答

22

您还没有表现出完整的代码,但我怀疑的问题是模型的__unicode__方法。这需要返回一个实际的Unicode字符串 - 如果你只是在做return self.recorded_on,将会失败并出现给定的错误。尝试类似return unicode(self.recorded_on)或使用strftime转换为您所需的日期格式,例如self.recorded_on.strftime('%Y-%m-%d')

+1

完美。谢谢。我实际上并不知道这个模型可能存在问题! – 2012-03-28 16:07:40

相关问题