2 votes

Comment gérer les migrations en tant que mainteneur de package Django?

J'ai écrit un nouveau package Django qui pourra être installé via pip. Je suis bloqué depuis un moment car je ne suis pas sûr de comment créer des migrations pour mon package particulier afin de permettre un workflow d'installation normal :

  1. pip install mon package
  2. ajouter mon package à vos "INSTALLED_APPS"
  3. exécuter python manage.py migrate

Actuellement, mon package ressemble à ceci :

package_root/
    dist/
    actual_package/
        __init__.py
        models.py
    setup.py

Le problème auquel je suis confronté est que lorsque j'empaquète l'application et que je l'installe en utilisant pip install dist/... puis l'ajoute à mes "INSTALLED_APPS" de l'application exemple, l'exécution de python manage.py migrate ne crée pas de tables pour les modèles dans actual_package/models.py et donc je (du point de vue d'un utilisateur) dois alors exécuter python manage.py makemigrations actual_package d'abord, ce qui n'est pas idéal.

Toute idée pour avoir les migrations déjà triées avant l'installation par un utilisateur serait excellente.

2voto

manassehkatz Points 2222

1 - Inclure les migrations initiales dans le package - par exemple, actual_package/migrations/0001_initial.py

2 - Inclure python manage.py migrate actual_package dans le processus d'installation - que ce soit pour une nouvelle installation ou une mise à jour.

3 - Si vous publiez des mises à jour pour actual_package, incluez toutes les nouvelles migrations.

Ceci devrait fonctionner à la fois pour les nouvelles installations et les mises à jour. Si les migrations ont déjà été effectuées (par exemple, une mise à jour mais aucune nouvelle migration incluse), alors la commande migrate ne fera rien de mal.

Un avertissement clé : Assurez-vous que l'installation de votre package vérifie la version appropriée de Django. Il y a eu beaucoup de changements entre les versions et le code - et les migrations - d'une version peuvent ne pas fonctionner pour une autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X