简而言之:如何在Django模型中指定BIGINT?
在我正在使用Django(0.97-svn发布)的当前项目中,我将所有模型中的所有整数字段定义为IntegerField。在我使用SQLite作为数据库后端的开发周期中,它正在完美地工作。然而,当我下载到MySQL时,我注意到对于其中一个IntegerFields,MySQL正在截断数据 - 显然,由于我不知道的原因,SQLite没有抱怨。我查看了模式,发现Django中的IntegerField在MySQL中表示为INT(11)字段。当然,MySQL截断数据的原因是因为数据长度超过11位。要解决此问题,我必须手动更新列,在本例中为BIGINT(20)。 Django和MySQL和平共处。但每当我重置其中包含该BIGINT的模型的应用程序时,Django再次将其创建为INT(11)。我看过Django文档,但没有找到任何东西。我忽略了什么吗?
感谢。
答案 0 :(得分:30)
BigIntegerField在变更集11887,2009-12-17 09:10:38中添加,是Django 1.2及更新版本的一部分。
答案 1 :(得分:5)
SQLite不会抱怨永远。它使用'manifest typing',即值具有类型,而不是列。它允许您将bigtext存储在smallint collumn上,或者您想要的任何内容! (除非您定义一个整数主键,它使用64位整数)。
这是一个非常方便的功能,但如果您要使用不同的引擎进行部署,它会使SQLite成为一个糟糕的选择。
要使用BIGINT,您必须创建自定义字段类。不幸的是,这部分在Django 1.0上发生了变化,因此如果/更新时你必须重写它。
答案 2 :(得分:-1)
尝试使用DecimalField。