首页 > 解决方案 > Django 迁移中的操作错误

问题描述

首先,我创建了一个名为 ' userorders' 的模型,其中包含字段:(id默认情况下)user_id、、和order_id

然后在意识到我不需要之后order_id,我首先从 MySQL DB 中删除了它(使用 Workbench),然后我在 Django 中对模型进行了更改,但它现在一直显示错误。

0013_orderdetails_userorders.py

migrations.CreateModel(
            name='userorders',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('user_id', models.IntegerField()),
                ('order_id', models.IntegerField()),
            ],
        ),

0014_remove_userorders_order_id.py

dependencies = [
        ('shoppingCart', '0013_orderdetails_userorders'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='userorders',
            name='order_id',
        ),
    ]

0015_userorders_order_id.py

dependencies = [
    ('shoppingCart', '0014_remove_userorders_order_id'),
]

operations = [
    migrations.AddField(
        model_name='userorders',
        name='order_id',
        field=models.IntegerField(default=None),
        preserve_default=False,
    ),

0016_remove_userorders_order_id.py

dependencies = [
        ('shoppingCart', '0015_userorders_order_id'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='userorders',
            name='order_id',
        ),
    ]

0017_auto_20200508_1639.py

dependencies = [
    ('shoppingCart', '0016_remove_userorders_order_id'),
]

operations = [
    migrations.RenameField(
        model_name='orderdetails',
        old_name='user_id',
        new_name='order_id',
    ),
]

错误- 当我尝试对我所做的任何更改进行迁移时(更改未反映在数据库中)

MySQLdb._exceptions.OperationalError: (1091, "Can't DROP 'order_id'; check that column/key exists")
The above exception was the direct cause of the following exception:
django.db.utils.OperationalError: (1091, "Can't DROP 'order_id'; check that column/key exists")

目前,userorders包含 2 个字段 -iduser_id

我怎样才能解决这个问题?

标签: djangodjango-modelsdjango-migrationsdjango-database

解决方案


问题是您的工作流程,您应该删除该字段,进行迁移并将迁移应用到您的数据库。

但是由于您现在遇到了问题,您可以通过重新创建order_id表中的列(使用工作台)来解决它,然后执行makemigrations&migrate然后 django 可以删除该列并且不应该显示错误。


推荐阅读