Uma migração personalizada deve funcionar.
- Você já tem os modelos A e B, então crie o modelo C com os campos desejados dos dois modelos.
- Faça uma migração de esquema normal, por exemplo manage.py makemigrations ... e solicite as alterações existentes
- Crie uma migração personalizada, por exemplo python manage.py makemigrations --empty yourappname (veja o link compartilhado por @2ps
- Edite o arquivo gerado acima. Adicionei um exemplo de migração de dados abaixo.
- rum manage.py migrate para aplicar a migração da etapa 4 acima.
-
Solte os modelos A e B se for esse o seu desejo, gere a migração e aplique e você deve ser bom.
...
def merge_models_ab(apps, schema_editor): A = apps.get_model("app_name", "A") B = apps.get_model("app_name", "B") C = apps.get_model("app_name", "C") #come up with some interesting ways to join A and B #iterate over join and insert into C #C.objects.create(...)
...
class Migrations(migrations.Migration): dependencies = [ ('app_name', 'some_prev_migrations'), ] operations = [ migrations.RunPython(merge_models_ab), ]