У меня есть Django 1.7 миграции, которая выглядит примерно так:миграция данных Django терпит неудачу при запуске manage.py тест, но не при запуске manage.py мигрировать
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
def units_to_m2m(apps, schema_editor):
Interval = apps.get_model("myapp", "Interval")
IntervalUnit = apps.get_model("myapp", "IntervalUnit")
for interval in Interval.objects.all():
IntervalUnit(
interval=interval,
unit=interval.unit,
base_date=interval.base_date
).save()
class Migration(migrations.Migration):
dependencies = [
('otherapp', '0007_auto_20150310_1400'),
('myapp', '0009_auto_20150316_1608'),
]
operations = [
migrations.CreateModel(
name='IntervalUnit',
# ...
),
# ...
migrations.AddField(
model_name='interval',
name='units',
field=models.ManyToManyField(to='otherapp.Unit', through='myapp.IntervalUnit'),
preserve_default=True,
),
migrations.RunPython(units_to_m2m),
migrations.RemoveField(
model_name='interval',
name='unit',
),
migrations.RemoveField(
model_name='interval',
name='base_date',
),
]
Когда я бегу manage.py migrate
, он мигрирует просто отлично , Когда я бегу manage.py test
, однако, он пытается создать тестовую базу данных, а затем терпит неудачу в середине этой миграции со следующей ошибкой:
Traceback (most recent call last):
...
File "/home/adam/myproject/myapp/migrations/0010_auto_20150317_1516.py", line 10, in units_to_m2m
for interval in Interval.objects.all():
...
django.db.utils.OperationalError: (1054, "Unknown column 'myapp_interval.base_date' in 'field list'")
При подключении к тестовой базе данных впоследствии (не удаляет его), структура базы данных выглядит так, как вы ожидали бы после миграции, даже если она разбилась наполовину. Что тут происходит?
Edit: Я пытался расколоть миграцию на три отдельных миграций, один, содержащий все вещи перед RunPython
один, одна из которых RunPython
сам по себе, и один, содержащий все вещи, которые впоследствии; он все еще делает то же самое.
Миграции должны быть в порядке, пока не достигнет «migrations.RunPython (units_to_m2m)». Кажется, что модель «планирования» еще не готова для этой операции в «myapp_interval.base_date». Я бы постарался поставить эту модель как зависимость и посмотреть, каков результат. – brunofitas
«scheduling» и «myapp» - это одно и то же, я просто не могу анонимизировать код правильно: S –