如何追溯制作不破坏django-admin的AutoField?

时间:2010-07-18 18:00:14

标签: django postgresql django-admin

我在一个Django应用程序中使用manage.py inspectdb创建了模型 现有的postgres数据库。这似乎有效,除了所有的 主键在模型中被描述为IntegerField s 它们可以在管理面板中编辑,并且必须基于手动输入 知道前一条记录的id。我刚学会了这个 经过客户的一些使用,所以我回去改变像

这样的东西
blog_id = models.IntegerField(primary_key=True)

...到...

blog_id = models.AutoField(primary_key=True)

现在,id字段不会出现在管理面板中(好),而是添加新行 变得不可能(不好)。

  

/ admin / franklins_app / blog / add /

中的IntegrityError      

重复键值违反了唯一约束“blog_pkey”

有什么问题? (额外的问题:是否有可能捕获Django试图指定为新行的主键的值?)

1 个答案:

答案 0 :(得分:0)

作为主键的串行字段后面的序列不知道手动输入的记录。

找到主键的最大值:

SELECT MAX(<primary_key>) FROM <your_table>;

然后将基础序列的下一个值设置为大于该值的数字:

SELECT SETVAL('<primary_key_seq>', <max_value_in_primary_key_plus_something_for_safety>);

您可以使用以下命令找到序列的名称(上面提到为<primary_key_seq>

SELECT pg_get_serial_sequence('<your_table_name>', '<primary_key_column_name');