Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment fusionner deux modèles Django (tables) en un seul modèle (table)

Une migration personnalisée devrait fonctionner.

  1. Vous disposez déjà des modèles A et B. Créez donc le modèle C avec les champs que vous souhaitez à partir des deux modèles.
  2. Effectuez une migration de schéma normale, par ex. manage.py makemigrations ... et appliquez toutes les modifications existantes
  3. Créer une migration personnalisée, par ex. python manage.py makemigrations --empty yourappname (voir lien partagé par @2ps
  4. Modifiez le fichier généré ci-dessus, j'ai ajouté un exemple de migration de données ci-dessous.
  5. rum manage.py migrate pour appliquer la migration de l'étape 4 ci-dessus.
  6. Déposez les modèles A et B si tel est votre souhait, générez la migration et appliquez et vous devriez être bon.

    ...

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