我有这种特殊情况,客户需要特定(传统)格式的预订编号,第一个从当年开始: 2015-12345 所以基本上每年我都必须从 0 开始
另一个以外键开头: 7-123 因此,每个用户创建的第一个文档的编号为 1,依此类推。
不幸的是,会有以该预订编号开头的长列表,因此获取所有记录并计算预订编号并不是真正的选择。我也考虑过覆盖 save() 方法,手动读取和自动递增,但是同时插入呢?
最佳答案
最好和最可靠的方法是使用 sql 触发器,这将完全消除对同时插入的担忧。但是覆盖保存方法也是完全可行的。
显式声明一个主键字段并为其选择整数。在你的保存方法中,如果主键是 None ,这意味着你正在保存一个新记录,查询数据库以确定新的主键应该是什么,分配它并保存。无论您在何处调用保存方法,都需要有一个原子事务并在失败时重试保存。
顺便说一句,你每年的起点是 0。这显然会导致冲突。因此,您必须在主键前加上年份,并在显示时将其删除。 (相信我,您不想在 Django 中弄乱复合主键)
关于python - Django 按规则自动递增 IntegerField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32101737/