如何让Django AutoFields从更高的数字开始

31 投票
9 回答
18592 浏览
提问于 2025-04-11 09:28

在我们的Django应用中,我们想让一个AutoField从1以外的数字开始。看起来没有明显的方法可以做到这一点。有没有什么好主意?

9 个回答

3

快速查看一下这个源代码,你会发现似乎没有这个选项,可能是因为它的增长不一定是每次加一;它会选择下一个可用的键:“一个根据可用ID自动递增的整数字段”——djangoproject.com

13

对于MySQL,我创建了一个信号,在syncdb之后会执行这个操作:

from django.db.models.signals import post_syncdb
from project.app import models as app_models

def auto_increment_start(sender, **kwargs):
    from django.db import connection, transaction
    cursor = connection.cursor()
    cursor = cursor.execute("""
                                ALTER table app_table AUTO_INCREMENT=2000
                            """)
    transaction.commit_unless_managed()

post_syncdb.connect(auto_increment_start, sender=app_models)

在syncdb之后,会自动执行一个修改表的命令。这样你就不用手动登录MySQL去输入这个命令了。

编辑:我知道这是个老话题,但我觉得这可能对某些人有帮助。

23

就像其他人说的,这个在数据库那边做会比在Django里做简单得多。

对于Postgres数据库,你可以这样操作:参考这个链接ALTER SEQUENCE sequence_name RESTART WITH 12345;。你可以查看自己使用的数据库引擎的文档,看看怎么在那边操作。

撰写回答