【问题标题】:Django rerun operation in migrationDjango 在迁移中重新运行操作
【发布时间】:2018-04-16 03:58:07
【问题描述】:

在我的模型中,我将字段设为唯一并为其进行了迁移。然后在生产服务器上,这个迁移崩溃了,因为数据库有重复的键。所以我在迁移中添加了以下代码:

def remove_duplicates(apps, schema_editor):
    Dir = apps.get_model('myapp.projects.models', 'Dir')

    for row in Dir.objects.all():
        if Dir.objects.filter(dir_url=row.dir_url).count() > 1:
            row.delete()


class Migration(migrations.Migration):

    dependencies = [
        ('projects', '0021_auto_20180412_1215'),
    ]

    operations = [
        migrations.RunPython(remove_duplicates),
        migrations.AlterField(
            model_name='dir',
            name='dir_url',
            field=models.TextField(unique=True),
        ),
    ]

但是如何测试这段代码在我的本地机器上是否工作?当我再次运行manage.py migrate 时,我的函数没有被执行,我收到了消息:

运行迁移:没有要应用的迁移。

【问题讨论】:

    标签: python django migration


    【解决方案1】:

    您可以在本地回滚迁移,然后重新应用它。

    这个依赖的上一个迁移是0021_auto_20180412_1215,所以你可以回滚到那个状态:​​

    manage.py migrate 0021
    

    当您再次运行 manage.py migrate 时,它将重新应用此新迁移。

    来自documentation

    migrate <app_label> <migrationname>:将数据库架构带到应用命名迁移的状态,但不会应用同一应用程序中的后续迁移。如果您之前迁移过指定的迁移,这可能涉及取消应用迁移。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-04
      • 2012-05-18
      • 2018-05-04
      • 2020-08-24
      • 2012-07-30
      • 1970-01-01
      • 2021-04-27
      • 2018-07-20
      相关资源
      最近更新 更多