Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So führen Sie zwei Django-Modelle (Tabellen) zu einem Modell (Tabelle) zusammen

Eine benutzerdefinierte Migration sollte funktionieren.

  1. Sie haben bereits die Modelle A und B, also erstellen Sie Modell C mit den gewünschten Feldern aus den beiden Modellen.
  2. Führen Sie eine normale Schemamigration durch, z. manage.py makemigrations ... und alle bestehenden Änderungen übernehmen
  3. Erstellen Sie eine benutzerdefinierte Migration, z. python manage.py makemigrations --empty yourappname (siehe Link, der von @2ps geteilt wird
  4. Bearbeiten Sie die oben generierte Datei, ich habe unten ein Beispiel für die Datenmigration hinzugefügt.
  5. rum manage.pymigrate, um die Migration aus Schritt 4 oben anzuwenden.
  6. Lassen Sie die Modelle A und B fallen, wenn Sie dies wünschen, generieren Sie die Migration und wenden Sie sie an, und Sie sollten gut sein.

    ...

    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),
        ]