sql >> Base de Datos >  >> RDS >> Mysql

Cómo fusionar dos modelos Django (tablas) en un solo modelo (tabla)

Una migración personalizada debería funcionar.

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