时间:2011-01-06 15:53:00

标签: django

4 个答案:

答案 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