Una migración personalizada debería funcionar.
- Ya tiene los modelos A y B, así que cree el modelo C con los campos que desee de los dos modelos.
- Realice una migración de esquema normal, p. manage.py makemigrations... y solicitar cualquier cambio existente
- Cree una migración personalizada, p. python manage.py makemigrations --empty yourappname (ver enlace compartido por @2ps
- Edite el archivo generado arriba, he agregado una migración de datos de muestra a continuación.
- rum manage.py migrate para aplicar la migración del paso 4 anterior.
-
Elimina los modelos A y B si ese es tu deseo, genera la migración y aplica y deberías estar bien.
...
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), ]