Django:制作自定义 PK 自动增量?

标签 django

我一直在用 custom primary keys对于 Django 中的模型。 (这是因为我正在将值导入数据库并且它们已经附加了 ID,因此保留现有值是有意义的。)

class Transaction(models.Model):
    id = models.IntegerField(primary_key=True)
    transaction_type = models.IntegerField(choices=TRANSACTION_TYPES)
    date_added = models.DateTimeField(auto_now_add=True)

但是,现在我想将模型的新实例添加到数据库中,并且我想自动生成一个唯一的主键。但是,如果我在创建实例时没有指定 ID,则会出现错误:
t = Transaction(transaction_type=0)
t.save()

给出:
IntegrityError at /page
(1048, "Column 'id' cannot be null")

如何自动生成唯一 ID 以指定新值,而不必更改导入现有值的方式?

更新

我写了这个自定义方法,它似乎有效......
class Transaction(models.Model):
    def save(self, *args, **kwargs):
        if not self.id:
            i = Transaction.objects.all().order_by('-id')[0]
            self.id = i.id+1
        super(Transaction, self).save(*args, **kwargs) 

最佳答案

您可以使用 AutoField为列id而不是 IntegerField .以下应该对您有用:

id = models.AutoField(primary_key=True)
id现在会自动增加并且不会像 save 中可能遇到的并发问题方法。

关于Django:制作自定义 PK 自动增量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4616787/

相关文章:

django - Django ORM如何舍入平均结果

python - 使用 Python 和 Scrapy 进行递归爬取

Python3 Unicode解码错误

django - MySQL模式到Django模型?

python - 使用 python 3.6 将 Django 2.0 与 sql server 2014 连接时出错

python - 对管道分隔列表进行分组和总计

python - 什么是好的 Django 工作流程?

python - 我可以对模板中的变量使用多个过滤器吗?

Django 只在表单中提交 csrf token ?

python - Django 属性错误