Я сталкивался с этим пару раз и не могу понять, почему это происходит. Когда я запускаю все миграции вместе через ./manage.py migrate
, последняя миграция (миграция данных) завершается сбоем. Решение состоит в том, чтобы выполнить миграцию данных самостоятельно после завершения других миграций. Как я могу запустить их все автоматически без ошибок?
У меня есть серия миграций:
- выполнение/0001.py
- заказ/0041.py (зависимость: выполнение/0001.py)
- заказ/0042.py
- заказ/0043.py
Я следовал этой статье RealPython, чтобы переместить модель в новое приложение, которое отлично работает и покрывается миграциями с №1 по №3. Миграция №3 также добавляет поле GenericForeignKey
. Миграция № 4 — это миграция данных, которая просто заполняет поле GenericForeignKey
из существующего поля ForeignKey
.
from django.db import migrations, models
def copy_to_generic_fk(apps, schema_editor):
ContentType = apps.get_model('contenttypes.ContentType')
Order = apps.get_model('order.Order')
pickup_point_type = ContentType.objects.get(
app_label='fulfillment',
model='pickuppoint'
)
Order.objects.filter(pickup_point__isnull=False).update(
content_type=pickup_point_type,
object_id=models.F('pickup_point_id')
)
class Migration(migrations.Migration):
dependencies = [
('order', '0042'),
]
operations = [
migrations.RunPython(copy_to_generic_fk, reverse_code=migrations.RunPython.noop)
]
Выполняя последовательность вместе, я получаю сообщение об ошибке:
fake.DoesNotExist: запрос на соответствие ContentType не существует.
Если я запускаю миграцию на № 3, а затем запускаю № 4, все работает правильно. Как я могу заставить их работать последовательно без ошибок?