python - Django 按规则自动递增 IntegerField

标签 python django database

我有这种特殊情况,客户需要特定(传统)格式的预订编号,第一个从当年开始: 2015-12345 所以基本上每年我都必须从 0 开始

另一个以外键开头: 7-123 因此,每个用户创建的第一个文档的编号为 1,依此类推。

不幸的是,会有以该预订编号开头的长列表,因此获取所有记录并计算预订编号并不是真正的选择。我也考虑过覆盖 save() 方法,手动读取和自动递增,但是同时插入呢?

最佳答案

最好和最可靠的方法是使用 sql 触发器,这将完全消除对同时插入的担忧。但是覆盖保存方法也是完全可行的。

显式声明一个主键字段并为其选择整数。在你的保存方法中,如果主键是 None ,这意味着你正在保存一个新记录,查询数据库以确定新的主键应该是什么,分配它并保存。无论您在何处调用保存方法,都需要有一个原子事务并在失败时重试保存。

顺便说一句,你每年的起点是 0。这显然会导致冲突。因此,您必须在主键前加上年份,并在显示时将其删除。 (相信我,您不想在 Django 中弄乱复合主键)

关于python - Django 按规则自动递增 IntegerField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32101737/

相关文章:

python - tkinter 中按钮后面的图像(照片图像)

python - 将输入直接添加到列表

python - 使用 psycopg2 将行插入 psql db

django - Django在模板中形成多个选择框大小

python - Django 如何知道呈现表单字段的顺序?

java - 为什么Android App无法连接Oracle数据库?

python - 在 Python 中将字符串截断为字节长度

javascript - 在 javascript 中使用 Django 模板变量

MYSQL在Insert中使用子查询结果

java - 在java中读取XML数据库列