【问题标题】:Django coercing to Unicode: need string or buffer, datetime.date foundDjango 强制转换为 Unicode:需要字符串或缓冲区,找到 datetime.date
【发布时间】:2012-04-12 05:22:16
【问题描述】:

我有一个模型:

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

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

任何帮助将不胜感激。

编辑:

数据示例:

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

【问题讨论】:

  • 请显示实际的回溯。哪一行导致错误?
  • 您是否尝试使用+ 运算符将recorded_on 与unicode 字符串连接起来?如果是这样,这样做的方法是u"a string" + str(obj.recorded_on)
  • 我的回溯与帖子有些不同,因为我已经简化了它 - 我怀疑这是一个普遍问题。但是 django 抱怨的我的代码行是渲染到模板的 views.py 行。链接在这里:dpaste.com/722851。我也在 shell 中尝试了查询,只是尝试打印或迭代查询集给出了相同的错误。
  • 我没有连接。正如我所提到的,我在 shell 中运行查询并尝试:>>> list(queryset),它给出了相同的强制错误。所以我想我需要直接对查询集采取行动,然后才能对它做任何事情。

标签: django datetime unicode


【解决方案1】:

您尚未显示完整的代码,但我怀疑问题出在您模型的 __unicode__ 方法上。这需要返回一个实际的 unicode 字符串——如果你只是在做return self.recorded_on,那将因给定的错误而失败。尝试return unicode(self.recorded_on) 之类的方法,或使用strftime 转换为所需的日期格式,例如self.recorded_on.strftime('%Y-%m-%d')

【讨论】:

  • 完美。谢谢你。我实际上不知道问题可能出在模型上!
猜你喜欢
  • 2011-07-17
  • 2013-04-26
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2016-04-28
  • 2013-11-05
  • 2014-02-22
  • 2021-03-28
相关资源
最近更新 更多