Mysql
 sql >> Database >  >> RDS >> Mysql

Come unire due modelli django (tabelle) in un modello (tabella)

Una migrazione personalizzata dovrebbe funzionare.

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