web-dev-qa-db-fra.com

Comment écraser les récentes migrations Django?

Dans le code des migrations de Django, il existe une commande squashmigrations qui: "écrase les migrations pour app_label jusqu'à et y compris migration_name en moins de migrations, si possible. "

Donc, si vous voulez écraser, disons, les 5 premières migrations, cela vous aidera.

Quelle est la meilleure façon de squash en commençant par un migration_name?

Dans un projet sur lequel je travaille actuellement, nous avons ajouté 5 à 10 nouveaux fichiers de migration à mesure que nous avons ajouté de nouvelles fonctionnalités. Nous déploierons tout le projet en même temps et il semble que les exécuter individuellement prendra trop de temps. J'aimerais écraser toutes les migrations de ce projet en une seule migration et tester le temps de l'exécuter.

26
Doug Harris
python manage.py squashmigrations <appname> <squashfrom> <squashto>

python manage.py help squashmigrations

https://docs.djangoproject.com/en/dev/topics/migrations/#migration-squashing

Cela vous donnera un contrôle plus précis sur les migrations vers squash et vous permettra de conserver un historique de validation plus propre. La suppression et la recréation de toutes les migrations peuvent entraîner d'autres problèmes tels que des dépendances circulaires selon la façon dont les modèles sont construits.

49
A---

Vous pouvez simplement supprimer les fichiers de migration et réexécuter makemigrations. Si vous avez un déploiement de développement qui les utilise, vous devez migrer vers l'arrière vers celui avant le premier que vous supprimez.

De plus, c'est probablement une bonne idée de valider votre code en premier, au cas où quelque chose se passe mal.

Également:

La légère complication avec cela est que s'il y a du code RunPython personnalisé, il ne sera pas inclus dans la nouvelle migration créée par makemigrations

10
Dan