【问题标题】:How does Django handle the incrementation of the AutoField Primary Key?Django 如何处理 AutoField 主键的增量?
【发布时间】:2020-05-24 11:24:48
【问题描述】:

在一个 Django 项目中使用 postgresql,我曾经在 db 中插入 en 条目,并且有一天。其他有权访问它的人使用 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 <table>_id_seq RESTART WITH <next_id> 之类的东西。您必须替换 <> 中的值。

标签: python django postgresql django-models django-admin


【解决方案1】:

使用ALTER SEQUENCE 命令

ALTER SEQUENCE <b>&amp;lttable_name&gt;</b>_id_seq RESTART WITH 37

例如:ALTER SEQUENCE myapp_register_id_seq RESTART WITH 37

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 2018-10-29
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2023-03-16
    相关资源
    最近更新 更多