我在一个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试图指定为新行的主键的值?)
答案 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');