J'ai une migration Django 1.7 qui ressemble à ceci:la migration des données Django échoue lors de l'exécution test de manage.py, mais pas lors de l'exécution manage.py migration
# -*- 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',
),
]
Quand je lance manage.py migrate
, il migre très bien . Quand je lance manage.py test
, cependant, il tente de créer la base de données de test, échoue au milieu de cette migration avec l'erreur suivante:
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'")
Lorsque je me connecte à la base de données de test après (il ne supprime pas), la structure de la base de données ressemble à ce que vous attendiez après l'exécution de la migration, même si elle s'est interrompue à mi-chemin. Que se passe t-il ici?
Edit: J'ai essayé diviser la migration en trois migrations distinctes, l'une contenant toutes les choses avant la RunPython
un, un contenant RunPython
lui-même, et un contenant toutes les choses qui sont par la suite; il fait toujours exactement la même chose.
Les migrations devraient être ok jusqu'à ce qu'il atteigne "migrations.RunPython (units_to_m2m)". Il semble que le modèle "scheduling" n'est pas encore prêt pour cette opération dans 'myapp_interval.base_date'. J'essaierais de mettre ce modèle en dépendance et de voir quel est le résultat. – brunofitas
'scheduling' et 'myapp' sont une seule et même chose, c'est juste que je n'arrive pas à anonymiser le code correctement: S –