答案 0 :(得分:3)
您可以将AutoField
用于id
列,而不是IntegerField
。以下内容适用于您:
id = models.AutoField(primary_key=True)
id
现在会自动增加,并且不会出现save
方法中可能遇到的并发问题。
答案 1 :(得分:3)
我最终使用了非常相似的代码片段,但使其略显通用:
def save(self, *args, **kwargs):
if self.id is None:
self.id = self.__class__.objects.all().order_by("-id")[0].id + 1
super(self.__class__, self).save(*args, **kwargs)
它使用self.__class__
,因此您只需将此代码复制粘贴到任何模型类,而无需更改任何内容。
答案 2 :(得分:2)
答案 3 :(得分:0)
如果删除声明的id字段,django将自动假设:
id = models.AutoField(primary_key=True)
在Django 1.8中,inspectdb
会在生成模型时自动检测auto_increment
并使用AutoField
。