Una migrazione personalizzata dovrebbe funzionare.
- Hai già i modelli A e B, quindi crea il modello C con i campi che desideri dai due modelli.
- Esegui una normale migrazione dello schema, ad es. manage.py makemigrations ... e richiedi eventuali modifiche esistenti
- Crea una migrazione personalizzata, ad es. python manage.py makemigrations --empty yourappname (vedi link condiviso da @2ps
- Modifica il file generato sopra, ho aggiunto un esempio di migrazione dei dati di seguito.
- rum manage.py migra per applicare la migrazione dal passaggio 4 sopra.
-
Rilascia i modelli A e B se questo è il tuo desiderio, genera la migrazione e fai domanda e dovresti essere bravo.
...
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), ]