Django从管理面板添加新条目

时间:2014-08-03 18:01:06

标签: python django

我尝试使用Django中的管理面板添加新条目 问题是我已经用200条记录填充了我的数据库,如果我尝试从管理员添加新条目,我会得到一个重复的密钥错误消息,每当我再次尝试该过程时它会不断增加 错误:

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

1 个答案:

答案 0 :(得分:1)

如果您使用Django创建了数据库表,那么当您在Django之外导入数据时,很可能没有更新您的auto_increment值。

也可能是当您导入数据时,您没有给出200条记录,每条记录都有自己唯一的主键。我认为(某些版本的)SQLite有时会允许大规模导入。

的MySQL

例如,我正在查看Sequel Pro中的MySQL表,并看到它的“auto_increment”值为144.这意味着下一个主键值将为144.

您可以使用以下命令查看表中的值(在MySQL中):

SHOW TABLE STATUS FROM databaseName where name="entry"

用Django数据库的名称替换“databaseName”。其他数据库软件可能会有不同的语法。

您可以使用以下方法设置下一个auto_increment值(在MySQL中):

ALTER TABLE databaseName.entry AUTO_INCREMENT ###

再次将databaseName替换为您的数据库名称;和以前一样,语法可能会因您使用的数据库软件而异。

如果这没有帮助,您可能会发现显示表的状态并将其复制到您的问题中很有用。这可能也有助于追踪问题:

SHOW CREATE TABLE databaseName.entry

的Postgres

在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”是“条目”模型表中列的名称;你的桌子可能会有所不同。有关详细信息,请参阅http://www.postgresql.org/docs/8.1/static/functions-sequence.html