【问题标题】:Django migration fails on change of to_field更改 to_field 时 Django 迁移失败
【发布时间】:2015-03-06 16:12:12
【问题描述】:

在我的 Django 模型中,我有一个类似这样的字段(简化):

category = models.ForeignKey(EnumValue, to_field='code', related_name='+', verbose_name="Kategorie", db_column='Kategorie')

然后我删除了 to_field 参数以将外键转换回指向主键的外键。

Django 迁移为此更改仅生成了一个简单的 AlterField,并且似乎没有修改外键或正确转换现有数据。无论如何,我在应用迁移时收到此错误消息:

pymysql.err.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails

我在网络上找不到有关此特定案例的任何信息。我会说这是一个 Django 迁移错误。你同意?您知道解决方法吗?

【问题讨论】:

  • 如果您删除了related_name='+'会发生什么?似乎这会阻止 FK 指向父模型的 PK。此外,看起来错误已被截断 - 它应该说明哪些列失败了,这会有所帮助。
  • 你能解决这个问题吗?我遇到了完全相同的问题。在 postgres 中错误地生成了约束(仍然指向旧的引用字段)。
  • @Salvia:我已经回答了我的问题,请看下文。

标签: django foreign-keys migration


【解决方案1】:

以下内容对我有用:

  1. 添加第二个字段,指向被引用类的主键。
  2. 在迁移文件中添加一个 python 例程,将引用从现有字段转移到新字段。
  3. 在第二次迁移中,删除旧字段并重命名新字段。

【讨论】:

    猜你喜欢
    • 2013-02-13
    • 2020-05-29
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2023-02-04
    • 2019-10-27
    相关资源
    最近更新 更多