gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:34:57 25 4
gpt4 key购买 nike

我一直在用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com