【问题标题】:Can't fix migration conflict in Django无法修复 Django 中的迁移冲突
【发布时间】:2020-10-17 12:19:59
【问题描述】:

我在解决迁移冲突时遇到问题。通常,当这些事情发生时,我们可以使用“python manage.py makemigrations --merge”将文件合并在一起。

但是,这一次我们收到了Could not find common ancestor of {'0001_initial', '0005_removed_custom_form_model_changed_name_to_staff_reports'} 错误。几个小时后,我们在修复它方面没有任何进展。

在我们删除了一个应用并创建了一个新应用来替换它之后,问题就出现了。

以下是我已经尝试过的事情:

  • 使用“python manage.py ”返回到先前的迁移。 (这样做会显示我试图避免的相同合并冲突)

  • 恢复已删除应用的apps.py文件并将应用重新添加到installed_apps中,然后再次使用“python manage.py ”进行回溯。 (这样做会导致相同的合并冲突错误)

我自己对迁移不太熟悉,所以我很快就没有想法了,不幸的是,在这种情况下删除数据库不是一个选项。

这里是有问题的迁移文件:

0001_initial.py:

import django.contrib.postgres.fields.jsonb
import django.core.serializers.json
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('properties', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='CustomFormDeclarations',
            fields=[
                ('deleted', models.DateTimeField(editable=False, null=True)),
                ('date_entered', models.DateTimeField(auto_now_add=True)),
                ('last_update', models.DateTimeField(auto_now=True)),
                ('id', models.AutoField(primary_key=True, serialize=False)),
                ('name', models.CharField(db_index=True, max_length=100)),
                ('fields', django.contrib.postgres.fields.jsonb.JSONField(default=list, encoder=django.core.serializers.json.DjangoJSONEncoder)),
                ('user_type', models.CharField(choices=[['', 'Choose a User Type'], ['admin', 'Admin'], ['coorporate', 'Coorporate'], ['onsite_manager', 'Onsite Manager'], ['onsite_staff', 'Onsite Staff'], ['maintenance', 'Maintenance']], db_index=True, max_length=100)),
            ],
            options={
                'permissions': [('view_customforms', 'Can view custom forms')],
            },
        ),
        migrations.CreateModel(
            name='CustomFormSubmissions',
            fields=[
                ('deleted', models.DateTimeField(editable=False, null=True)),
                ('id', models.AutoField(primary_key=True, serialize=False)),
                ('values', django.contrib.postgres.fields.jsonb.JSONField(default=list, encoder=django.core.serializers.json.DjangoJSONEncoder)),
                ('last_updated', models.DateTimeField(auto_now=True)),
                ('date_entered', models.DateTimeField(auto_now_add=True)),
                ('form', models.ForeignKey(db_column='form_id', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='custom_forms.CustomFormDeclarations')),
                ('property', models.ForeignKey(db_column='property_id', on_delete=django.db.models.deletion.CASCADE, to='properties.Property')),
            ],
            options={
                'abstract': False,
                'default_permissions': ('add', 'change', 'delete', 'view', 'undelete'),
            },
        ),
    ]

0005_removed_custom_form_model_changed_name_to_staff_reports

从 django.db 导入迁移

class Migration(migrations.Migration):

    dependencies = [
        ('custom_forms', '0004_removed_custom_form_model_changed_name_to_staff_reports'),
        ('users', '0008_removed_custom_form_model_changed_name_to_staff_reports'),
    ]

    operations = [
        migrations.DeleteModel(
            name='CustomFormDeclarations',
        ),
        migrations.DeleteModel(
            name='CustomFormSubmissions',
        ),
    ]

【问题讨论】:

  • 你删除了哪个应用?是不是迁移dependencies之一?
  • 我们删除了 custom_forms(这是依赖项之一)。我试图恢复应用程序(只需创建另一个 app.py),但错误没有解决。

标签: python django database migration


【解决方案1】:

如果您用尽了 django 迁移的选项,那么您可以尝试重新创建数据库,如下所示:

从(假设)您的生产环境中转储数据。

python manage.py dumpdata > fixtures/data.json

通过将迁移复制到不同的文件夹来备份它们。然后将它们从项目中移除。

创建一个并行数据库并将您的开发/阶段连接到数据库然后...

python manage.py createmigrations
python manage.py migrate
python manage.py loaddata fixtures/data.json

验证应用程序是否正确执行以及您的数据是否正确。

如果成功,您可以将生产环境连接到新创建的数据库,或者在生产数据库本身上执行相同的过程。

如果上述方法不起作用,您可能需要在转储数据中指定自然外键或/和自然主键。更多信息请见https://docs.djangoproject.com/en/3.0/ref/django-admin/#dumpdata

【讨论】:

    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 2018-04-16
    • 2019-11-23
    • 2021-10-28
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多