Dans de nombreux cas, je crois que @allcaps's réponse fonctionne bien.
Cependant, il est parfois nécessaire de renommer réellement une application, par exemple pour améliorer la lisibilité du code ou éviter toute confusion.
La plupart des autres réponses impliquent soit manipulation manuelle de bases de données o bricoler des migrations existantes ce que je n'aime pas beaucoup.
Comme alternative, j'aime créer une nouvelle application avec le nom désiré, copier le tout, m'assurer que cela fonctionne, puis supprimer l'application originale :
-
Commencez un nouveau avec le nom désiré, et copiez tout le code de l'application originale dans celle-ci. Assurez-vous que vous corrigez l'espacement des noms, dans le code nouvellement copié, pour correspondre au nom de la nouvelle application.
-
makemigrations
y migrate
. Remarque : si l'application comporte beaucoup de clés étrangères, il y aura probablement des problèmes de conflits d'accesseurs inversés lors de la migration initiale de l'application copiée. Vous devez renommer l'accesseur related_name (ou en ajouter de nouveaux) sur l'ancienne application pour résoudre les conflits.
-
Créer un migration des données qui copie les données pertinentes des tableaux de l'application originale dans les tableaux de la nouvelle application, et migrate
encore.
À ce stade, tout fonctionne encore, car l'application originale et ses données sont toujours en place.
-
Maintenant vous pouvez remanier tout le code dépendant, afin qu'il n'utilise que la nouvelle application. Voir les autres réponses pour des exemples de ce à quoi il faut faire attention.
-
Une fois que vous êtes certain que tout fonctionne, vous pouvez supprimer l'application originale. Cela implique une autre migration (de schéma).
Cela présente l'avantage que chaque étape utilise le mécanisme normal de migration de Django, sans manipulation manuelle de la base de données, et que nous pouvons tout suivre dans le contrôle de la source. En outre, nous conservons l'application originale et ses données jusqu'à ce que nous soyons sûrs que tout fonctionne.
0 votes
Salut danihp. Oui, je l'ai fait. J'utilise également virtualenv, je ne sais pas si cela a quelque chose à voir.
1 votes
Si, par hasard, vous utilisez PyCharm, son
rename
vous sera d'une grande aide.1 votes
Le Sud ne soutient-il pas une telle opération ?
0 votes
@andi stackoverflow.com/questions/4566978/
0 votes
pip install django-rename-app
puispython manage.py rename_app <old_app_name> <new_app_name>
, github.com/odwyersoftware/django-rename-app