Django从管理面板添加新条目



我试图通过在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

最新更新