问题 有没有办法将新Django对象的id值设置为以某个值开始?


有没有办法在Django中为对象设置id值的计数器?

例如,我有一组对象'视频'当前在id = 100,下次我创建一个'Video'类型的对象时,它将是id = 101。但是,我想让所有新创建的Video对象从id = 2000开始。有没有办法做到这一点?


10436
2017-12-08 14:08


起源

一个丑陋的黑客就是制作一个夹具,在ID = 1999的数据库中创建一个虚拟行。下一个自动生成的ID将是2000。 - Density 21.5
真?所以auto_increment刚刚从db中的max开始?即。不想填补任何漏洞?我没有意识到这一点。这对我需要做的事情来说真的很好。谢谢! - 9-bits
进一步了解我的答案。 - Density 21.5


答案:


您可以创建一个夹具,在ID = 1999的数据库中创建一个虚拟行。下一个自动生成的ID将是2000。

这个解决方案可能取决于你的数据库后端“恢复你离开的地方”。至少MySql和PostgreSQL这样做(我猜每个后端都这样做)。

还有一个只有MySql的解决方案(据我所知),它包含一个SQL语句 ALTER TABLE tbl AUTO_INCREMENT = 100;

但是,这不再是数据库不可知的了。


3
2017-12-11 20:09





您可以在创建对象时指定ID,只要在保存之前执行此操作:

new = Video()
new.id = 2000
new.save()

你可以只计算你想要的ID - 虽然我不确定Django的自动ID字段有什么问题;)


13
2017-12-08 15:23



我认为OP意味着要问是否有一种方法可以在Django中配置auto-id序列的起始值。 - Krystian Cybulski