【问题标题】:Django IntegerField returning string(!) - how to coerce to int?Django IntegerField 返回字符串(!) - 如何强制转换为 int?
【发布时间】:2012-03-12 19:10:48
【问题描述】:

我在模型上声明了一个 IntegerField,如下所示:

amount = models.IntegerField()

访问它时,它有时会返回一个字符串。造成这种情况的直接原因是它分配了一个字符串。到目前为止,如此不神秘。即使保存后它也会返回一个字符串。

这让我有点惊讶:如果 IntegerField 在赋值时(或最迟在保存时)将其值强制转换为整数,那就太好了,这样用户就可以依赖它是一个整数。

(我的应用程序使用 sqlite。)

有没有办法让 IntegerField 只返回整数?还是我必须创建一个自定义字段才能执行此操作?

【问题讨论】:

  • 尝试再次从数据库中拉取对象,然后查看它是否为 int。如果我记得,进入数据库,Django 的 ORM 将对对象调用 repr() - 这就是为什么它看起来正常保存的原因。
  • @NathanHoad:谢谢。我会尝试,但并不完全令人满意:(
  • 投反对票的人:愿意暴露自己吗?
  • @Marcin 是的,发生这种事情时有点烦人。最快的解决方法是找到字符串的来源并将其转换为 int - 对我而言,这表明验证中早先出现了一些问题,应该解决这个问题。
  • @NathanHoad:同意,而且我确实是这样解决的。

标签: python django django-models django-orm


【解决方案1】:

正如我在评论中提到的,发生这种情况的原因是 Django 在保存时对字段执行了相关强制,但不会将值更改反映回原始模型,因为如果不再次查询数据库就无法完成。

解决此类问题的最快方法(从长远来看也是最简单的方法)是找到字符串的来源并将其转换为 int - 对我而言,这表明验证中早先出现了一些问题,应该是捡起来。

【讨论】:

  • 我的问题是该值作为字符串来自表单并被保存到一个新对象中。然后使用那个新对象,我试图做数学,但即使你在数据库中它是一个整数,该对象也返回了一个字符串。
猜你喜欢
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多