首页 > 解决方案 > Django 如何处理 AutoField 主键的增量?

问题描述

在一个带有postgresql的Django项目中,我曾经在数据库中插入了 en 条目,并且有一天。有权访问它的其他人已使用pgadmin4在数据库中手动添加了 36 行其他行。当我想在 Django 项目中添加新行时,很明显,因为Django尝试将 1 添加到 Django 项目添加的最后一个条目 id (这就是我认为它正在尝试做的事情)。这是回溯:IntegrityError

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)

标签: pythondjangopostgresqldjango-modelsdjango-admin

解决方案


使用ALTER SEQUENCE命令

ALTER SEQUENCE <table_name>_id_seq RESTART WITH 37

前任:ALTER SEQUENCE myapp_register_id_seq RESTART WITH 37


推荐阅读