¿Archivo de migración de Django en otra aplicación?
Imaginemos un siguiente proyecto simplificado de Django:
<root>/lib/python2.7/site-packages/externalapp/shop
<root>/myapp
myapp
también se extiendeexternalapp.shop.models
modelos agregando algunos campos.manage.py makemigrations
hizo generado siguiente archivo de migración de esquema llamado0004_auto_20150410_2001.py:
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
# __init__ is added by me as an attempt how to tell django's
# migration loader operations are for the different application
def __init__(self, name, app_label):
super(Migration, self).__init__(name, 'shop')
dependencies = [
('myapp', '__first__'),
('shop', '0003_auto_20150408_0958'),
]
operations = [
migrations.AddField(
model_name='product',
name='vat',
field=models.ForeignKey(to='myapp.VAT', null=True),
),
]
Si el esquema de migración anterior se coloca en<root>/lib/python2.7/site-packages/externalapp/shop/migrations/
ruta por defecto,manage.py migrate
tiene éxito y los campos de la tabla se agregan correctamente.
Sin embargo, si muevo el archivo de migración anterior amyapp/migrations/
, siguiendomanage.py migrate
falla con
django.core.management.base.CommandError: migraciones conflictivas detectadas (0001_initial, 0004_auto_20150410_2001 en myapp). Para solucionarlos, ejecute 'python manage.py makemigrations --merge'
mensaje de error que no puedo entender y sugerímakemigrations --merge
falla con lo esperado:
ValueError: no se pudo encontrar el ancestro común del conjunto ([u'0001_initial ', u'0004_auto_20150410_2001'])
He tratado de anularmigrations.Migration.__init__
alterar derivadoapp_label
pero parece que el cargador de migración lo ignora.
¿Cómo ajustar el archivo de migración para que pueda funcionar desde otra aplicación? El motivo está en producción.externalapp
las fuentes no se pueden tocar directamente, son de solo lectura.