【问题标题】:Django migrations for foreign key does not reflect in MySQL database外键的 Django 迁移未反映在 MySQL 数据库中
【发布时间】:2019-07-12 13:46:44
【问题描述】:

这是我的迁移文件,名为 0004_auto_20190218_1614.py。我运行了makemigrationsmigration 命令。所有其他列的添加和删除都是成功的,但在这种情况下,我添加了一个外键,更改并没有反映在数据库中。当我尝试插入记录时。

# Generated by Django 2.1.5 on 2019-02-18 10:44`

    from django.db import migrations, models
    import django.db.models.deletion


class Migration(migrations.Migration):

    dependencies = [
        ('projectName', '0003_auto_20190218_1604'),
    ]

    operations = [
        migrations.AlterField(
            model_name='projectdetails',
            name='userdetails',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projectName.UserDetails'),
        ),
    ]

我得到了这个异常

_mysql_connector.MySQLInterfaceError: Unknown column 'userdetails_id' in 'field list'

然后是这个:

During handling of the above exception, another exception occurred:
AttributeError: 'NoneType' object has no attribute 'strip'

我是 Django 的新手。任何帮助将不胜感激。

【问题讨论】:

  • 你在哪里调用 strip()
  • 我没有在views.py中调用strip()。事实上,我尝试使用 Ctrl+F 'strip' 发现我的文件中不存在
  • 你需要先运行userdetails表迁移,然后这个
  • 您的意思是单独迁移每个表?
  • 使用 python manage.py showmigrations 查看应用了哪些迁移

标签: django django-models django-rest-framework django-migrations django-mysql


【解决方案1】:

有时模型中应用的更改可能不会反映在数据库中。最简单的方法是删除迁移文件夹中的迁移文件(init.py 除外),然后再次运行 python manage.py makemigrations。 或者您可以使用south migrations 来有效地反映您在数据库中的迁移。

south migrations 的文档可以在以下位置找到: https://south.readthedocs.io/en/latest/

【讨论】:

    【解决方案2】:

    从您的DB-Models,您可以看到一个名为django-migrations 的表。在这里,您将找到所有已应用的迁移。可能的原因之一是您手动删除了一些迁移文件,但不幸的是,引用保留在 django-migrations 表中。一种可能的解决方案是删除那些应用迁移并再次安全运行python manage.py migrate 命令。

    注意:不要删除任何已经对模型产生物理影响的迁移。我想说的是,模型数据可用于这些迁移效果。如果您对此不确定,最好降低您的 dB,然后再执行此操作。

    【讨论】:

    • 我确实在我的迁移中得到了一个重复的文件,该文件在我当前的文件列表中实际上并不存在。我已删除并再次进行迁移。但仍然没有得到我的外键
    • 无论何时删除任何迁移并添加新迁移,请确保序列和依赖项正确同步如果一切正常,django 不应合并任何两个提交。如果 django 要求进行该合并,那么串行肯定是不一样的。您还需要检查来自django-migrations 表的应用迁移序列。
    【解决方案3】:

    确保您运行migrate 命令并检查您的数据库是否有更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-11
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2015-03-02
      • 2014-02-21
      相关资源
      最近更新 更多