【问题标题】:Django, South and IntegrityError in admin interface管理界面中的 Django、South 和 IntegrityError
【发布时间】:2014-01-31 21:22:24
【问题描述】:

我有一个定义了自己的主键的模型。我删除了这个主键,South 然后在 schemamigration/migrate 中正确地添加了默认的 Django“id”键。

在尝试创建模型实例时(通过管理界面或其他方式),我得到:

NOT NULL constraint failed: app_myModel.id

迁移中的 forwards 方法说:

db.add_column(u'app_myModel', u'id',
                  self.gf('django.db.models.fields.AutoField')(default=1, primary_key=True),
                  keep_default=False)

但是架构(sqlite3)是:

 "id" integer NOT NULL);

在我看来,这不像 AUTOINCREMENT 字段。不知道如何通过迁移来恢复它,如果它发生在那里,我真的不想做任何我在生产中无法做的事情。

发生了什么事?解决方法是什么?

提前致谢。

【问题讨论】:

  • 一直在阅读论坛,看来 South 在处理 PK 方面确实很糟糕,尤其是在删除一个并添加另一个时。这很奇怪,因为迁移似乎将 SQL 生成委托给 Django 的 ORM ...

标签: django django-south


【解决方案1】:

看来它一定是南方的一个错误,为了修复它,我做了以下操作:

  • 回滚到0004,问题出在0006
  • 已删除 0006
  • 运行 ./manage schemamigration app --auto --update , 更新 0005
  • 迁移到 0005

表是0005年做的,不知道有没有意义。您可能需要向后迁移到创建表的迁移,然后更新该迁移,以便它可以正确检测架构。引用 South 的主要作者 Andrew Godwin,讨论 South 的主键:

...那个代码库已经让几个成年人流泪了

作者似乎意识到了这些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2012-12-11
    相关资源
    最近更新 更多