Je suis d'accord avec Laksham que vous devriez éviter cette situation. Mais parfois, nous avons à la. Je fais face à cette situation et de procéder de cette façon.
Si vous voulez éviter de perdre des données, vous pouvez vider le vieux données d'application dans un fichier json.
python manage.py dumpdata old_app --natural --indent=4 1> old_app.json
Remarque l' --option naturelle qui va forcer les types de contenus peuvent être exportés avec leur naturel touches (app_name, modèle)
Ensuite, vous pouvez créer une petite commande pour ouvrir ce fichier json et à remplacer tous les old_app références avec les new_app.
Quelque chose comme cela devrait fonctionner
class Command(BaseCommand):
help = u"Rename app in json dump"
def handle(self, *args, **options):
try:
old_app = args[0]
new_app = args[1]
filename = args[2]
except IndexError:
print u'usage :', __name__.split('.')[-1], 'old_app new_app dumpfile.json'
return
try:
dump_file = open(filename, 'r')
except IOError:
print filename, u"doesn't exist"
return
objects = json.loads(dump_file.read())
dump_file.close()
for obj in objects:
obj["model"] = obj["model"].replace(old_app, new_app, 1)
if obj["fields"].has_key("content_type") and (old_app == obj["fields"]["content_type"][0]):
obj["fields"]["content_type"][0] = new_app
dump_file = open(filename, 'w')
dump_file.write(json.dumps(objects, indent=4))
dump_file.close()
Puis renommer l'application, modifiez le nom dans INSTALLED_APPS.
Ensuite, vous devez supprimer tous les migrations sud, à régénérer et à appliquer une première migration pour la nouvelle application. Puis exécuter la commande SQL:
update django_content_type set app_label='new_app' where app_label='old_app'
Ensuite, lancez une sud migrent pour la nouvelle application, afin de créer les tables et charger le fichier json.
python manage.py loaddata old_app.json
J'ai fait quelque chose de similaire sur un projet et il semble fonctionner ok.
J'espère que cela aide