我一直在为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)
Run Code Online (Sandbox Code Playgroud)
但是,现在我想将新模型实例添加到数据库中,并且我想自动生成唯一的主键.但是如果我在创建实例时没有指定ID,则会收到错误消息:
t = Transaction(transaction_type=0)
t.save()
Run Code Online (Sandbox Code Playgroud)
得到:
IntegrityError at /page
(1048, "Column 'id' cannot be null")
Run Code Online (Sandbox Code Playgroud)
如何自动生成唯一ID以指定新值,而无需更改导入现有值的方式?
UPDATE
我写过这个自定义方法,看起来很有用......
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)
Run Code Online (Sandbox Code Playgroud)
您如何导入现有的值?Transaction在你的s中写入一些内容来为你生成一个新的 ID 是很简单的__init__,但如果不知道如何导入其他值,我无法确定它是否会改变你使用它们的方式。
| 归档时间: |
|
| 查看次数: |
8258 次 |
| 最近记录: |