Eine benutzerdefinierte Migration sollte funktionieren.
- Sie haben bereits die Modelle A und B, also erstellen Sie Modell C mit den gewünschten Feldern aus den beiden Modellen.
- Führen Sie eine normale Schemamigration durch, z. manage.py makemigrations ... und alle bestehenden Änderungen übernehmen
- Erstellen Sie eine benutzerdefinierte Migration, z. python manage.py makemigrations --empty yourappname (siehe Link, der von @2ps geteilt wird
- Bearbeiten Sie die oben generierte Datei, ich habe unten ein Beispiel für die Datenmigration hinzugefügt.
- rum manage.pymigrate, um die Migration aus Schritt 4 oben anzuwenden.
-
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), ]