Une migration personnalisée devrait fonctionner.
- 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.
- Effectuez une migration de schéma normale, par ex. manage.py makemigrations ... et appliquez toutes les modifications existantes
- Créer une migration personnalisée, par ex. python manage.py makemigrations --empty yourappname (voir lien partagé par @2ps
- Modifiez le fichier généré ci-dessus, j'ai ajouté un exemple de migration de données ci-dessous.
- rum manage.py migrate pour appliquer la migration de l'étape 4 ci-dessus.
-
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), ]