我试图通过在Django中使用管理面板添加一个新条目问题是,我已经用200条记录填充了我的DB,如果我尝试从admin添加一个新条目,我会得到一个重复的键错误消息,每当我再次尝试这个过程时,它就会不断增加错误:
duplicate key value violates unique constraint "app_entry_pkey"
admin.py:
admin.site.register(Entry)
模型:
class Entry(models.Model):
title = models.CharField(max_length=255)
url = models.TextField(max_length=255)
img = models.CharField(max_length=255)
def __unicode__(self):
return self.title
如果你是用Django创建的数据库表,那么很可能你的auto_increment值在你从Django外部导入数据时没有更新。
也可能是当您导入数据时,您没有为200条记录提供各自唯一的主键。我认为(某些版本的)SQLite有时会允许大规模导入。
<标题> MySQL h1> 如,我正在查看Sequel Pro中的MySQL表,并看到它的"auto_increment"值为144。这意味着下一个主键值将是144。你可以在你的表中看到这个值(在MySQL中):
SHOW TABLE STATUS FROM databaseName where name="entry"
将" databaseName "替换为Django数据库的名称。其他数据库软件可能有不同的语法。
你可以设置下一个auto_increment值(在MySQL中):
ALTER TABLE databaseName.entry AUTO_INCREMENT ###
再次用数据库名替换databaseName;和以前一样,语法可能会根据您使用的数据库软件而有所不同。
如果这没有帮助,你可能会发现显示表的状态并将其复制到你的问题中是有用的。这在跟踪问题时可能也很有用:
SHOW CREATE TABLE databaseName.entry
<标题> Postgres h1> Postgres中,您可以使用以下命令获取自动递增变量(在Postgres中称为序列)的当前值:
SELECT last_value FROM app_entry_pkey;
你可能会把它设置为一个新的值,比如:
ALTER SEQUENCE app_entry_pkey RESTART WITH ###
或
SELECT setval('app_entry_pkey', ###)
但是,请注意,我手边没有Postgres数据库来测试这些。您可能还会发现以下命令很有用:
SELECT MAX(id) FROM entry
SELECT nextval('app_entry_pkey')
后者通常应该比前者大,并注意"id"是"entry"模型表中的列名;在你的桌子上可能会有所不同。详细信息请参见http://www.postgresql.org/docs/8.1/static/functions-sequence.html
标题>标题>