Django 如何处理 AutoField 主键的自增?
How does Django handle the incrementation of the AutoField Primary Key?
在使用 postgresql 的 Django 项目中,我曾经在数据库中插入了一个条目,有一天。有权访问它的其他人已使用 pgadmin4 在数据库中手动添加了 36 行其他行。当我想用 Django 项目添加新行时,我显然得到 IntegrityError
,因为 Django 试图将 1 添加到 Django 项目添加的最后一个条目 ID(这是我认为它正在尝试做什么)。这是回溯:
duplicate key value violates unique constraint "register_catalog_pkey"
DETAIL: Key (id)=(2) already exists.
如何告诉 Django 最后一个条目 id 是 36(用 pgadmin4 手动添加的最后一个值)?
我也尝试在 Django Admin 中添加 id 字段以便我可以对其进行编辑,但它没有显示出来。
class RegisterAdmin(admin.ModelAdmin)
list_display_links = ['id',]
list_display = ('id',)
我是否需要删除由 Django 处理的主键,并定义一个 IntegerField 作为主键?
register_id = models.AutoField(primary_key=True)
至
register_id = models.IntegerField(primary_key=True)
使用ALTER SEQUENCE
命令
ALTER SEQUENCE <b><table_name></b>_id_seq RESTART WITH 37
例如:ALTER SEQUENCE myapp_register_id_seq RESTART WITH 37
在使用 postgresql 的 Django 项目中,我曾经在数据库中插入了一个条目,有一天。有权访问它的其他人已使用 pgadmin4 在数据库中手动添加了 36 行其他行。当我想用 Django 项目添加新行时,我显然得到 IntegrityError
,因为 Django 试图将 1 添加到 Django 项目添加的最后一个条目 ID(这是我认为它正在尝试做什么)。这是回溯:
duplicate key value violates unique constraint "register_catalog_pkey"
DETAIL: Key (id)=(2) already exists.
如何告诉 Django 最后一个条目 id 是 36(用 pgadmin4 手动添加的最后一个值)?
我也尝试在 Django Admin 中添加 id 字段以便我可以对其进行编辑,但它没有显示出来。
class RegisterAdmin(admin.ModelAdmin)
list_display_links = ['id',]
list_display = ('id',)
我是否需要删除由 Django 处理的主键,并定义一个 IntegerField 作为主键?
register_id = models.AutoField(primary_key=True)
至
register_id = models.IntegerField(primary_key=True)
使用ALTER SEQUENCE
命令
ALTER SEQUENCE <b><table_name></b>_id_seq RESTART WITH 37
例如:ALTER SEQUENCE myapp_register_id_seq RESTART WITH 37