在 django 模型中为 id 设置自动递增初始值

Posted

技术标签:

【中文标题】在 django 模型中为 id 设置自动递增初始值【英文标题】:set auto increment initial value for id in django model 【发布时间】:2013-05-15 20:11:36 【问题描述】:

我有一个只有一个字段的模型。 名字。

class City(models.Model): <br>
    name = models.CharField(max_length=30)

Django 自己设置id,所以我在SQL 中得到iddescription 字段。

id 字段始终递增 1。 我想从 1000 开始,然后加一。

在 Django 中有没有办法做到这一点?

【问题讨论】:

不,您必须在 mysql 级别使用 ALTER TABLE tbl AUTO_INCREMENT = 1000; 执行此操作。 Django 没有也不应该为此负责。 我只是想问一下,如果有什么方法可以由 django 设置?因为,在其他系统上,sync db 无济于事。你必须再次运行该脚本,ALTER TABLE tbl AUTO_INCREMENT = 1000; 对于 15 个字符:不。AutoField 只是底层数据库结构的表示。 Django 无法控制。 "我想从 1000 开始" - 为什么?如果它是一个合成键,它的值应该无关紧要...... @eggyal 我有一个表(change_table)它具有从 0 开始的 ID,并且我必须为每个更改有另一个唯一标识符,该标识符应该从 1000 开始。所以每个条目然后该表有两个 id,一个从 1,2 开始,另一个可见 ID,必须从 1001 开始?我该怎么处理? 【参考方案1】:

您可以使用initial data 为您的模型提供 1000 的 ID。我认为如果第一个模型 PK 为 1000,django 将继续使用 1001。

或者您创建一个名为 custom_id 的属性,该属性始终为 1000+id。这样您的数据库中有一个额外的字段,但它会起作用。

【讨论】:

【参考方案2】:

我知道这个问题已经过时了,但是我将这个方法发布给那些在搜索结果中发现这个问题并且需要一个更好的解决方案来获得更新的 Django 版本(即 Django >= 1.8)的人:

按照here 的文档创建数据迁移。此解决方案将在您迁移应用程序时运行(并且可能作为部署策略的一部分),并允许您编写满足数据库特定需求的代码。

我认为这是在 Django >= 1.7 中为自动递增数据库字段设置初始值的最简洁方法,因为它利用了标准 Django 迁移并且不会以可能无法正常工作的方式劫持框架的其他功能未来。

【讨论】:

以上是关于在 django 模型中为 id 设置自动递增初始值的主要内容,如果未能解决你的问题,请参考以下文章

我可以在没有自动 ID 的情况下在 Django 中创建模型吗?

如何从某个数字(如 2456)启动 Django 模型自动递增键?

Java Spring Hibernate:模型类主键自动递增字段:在字段上设置自动和手动

是否有任何工具可以自动在Django中为模型创建模板

使用字符串 django 自动增加 id 值

如何在 Django 中创建自动递增整数字段?