Arquivo de migração do Django em outro aplicativo?
Vamos imaginar um projeto simplificado do Django a seguir:
<root>/lib/python2.7/site-packages/externalapp/shop
<root>/myapp
myapp
também se estendeexternalapp.shop.models
modelos adicionando alguns campos.manage.py makemigrations
gerado após o arquivo de migração de esquema chamado0004_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),
),
]
Se o esquema de migração acima for colocado em<root>/lib/python2.7/site-packages/externalapp/shop/migrations/
caminho por padrão,manage.py migrate
é bem-sucedido e os campos da tabela foram adicionados corretamente.
No entanto, se eu mover o arquivo de migração acima paramyapp/migrations/
, Seguemanage.py migrate
falha com
django.core.management.base.CommandError: Migrações conflitantes detectadas (0001_initial, 0004_auto_20150410_2001 no myapp). Para corrigi-los, execute 'python manage.py makemigrations --merge'
mensagem de erro que não consigo entender e sugerimakemigrations --merge
falha com o esperado:
ValueError: não foi possível encontrar o ancestral comum do conjunto ([u'0001_initial ', u'0004_auto_20150410_2001'])
Eu tentei substituirmigrations.Migration.__init__
alterar derivadoapp_label
mas parece que o carregador de migração o ignora.
Como ajustar o arquivo de migração para que ele possa funcionar em outro aplicativo? O motivo está na produçãoexternalapp
as fontes não podem ser tocadas diretamente, são somente leitura.