如何防止Django数据库使用已删除对象的ID来创建新对象?

1 投票
1 回答
770 浏览
提问于 2025-04-18 08:07

我正在用 django 写一个网站,网站里有一个 sqlite 数据库。我在网站里有一个模型,长这样:

class Foo(models.model):
   name = models.Charfield(max_length=30)

数据库会为这个类创建一个唯一的 Id 列。比如说,我从 Foo 类创建了一个对象,然后把它删除了,再创建一个新的对象 g,这两个对象的 Id 是一样的:

>> f = Foo.objects.create(name="fooname")
>> f.id
4
>> f.delete()
>> g = Foo.objects.create(name="fooname2")
>> g.id
4

但是我不想让数据库把一个已经删除的对象的 id 用在新创建的对象上,我该怎么做呢?

1 个回答

1

这是一个已知的错误,已经在Django 1.7版本中被修复,具体情况可以查看:

以下是发布说明中的引用:

在SQLite数据库中,AutoField列现在将使用AUTOINCREMENT选项创建,这样可以确保值是单调递增的。这将导致SQLite中的主键编号行为发生变化,使其与大多数其他SQL数据库一致。这项更改只适用于新创建的表。如果你有一个使用旧版本Django创建的数据库,你需要进行迁移才能利用这个新特性。

撰写回答