Puis-je effectuer un dumpdata
dans Django sur un seul modèle, plutôt que sur l'ensemble de l'application, et si oui, comment?
Pour une application, ce serait:
python manage.py dumpdata myapp
Cependant, je souhaite que certains modèles spécifiques, tels que "myapp.mymodel", soient sauvegardés. La raison en est, j'ai quelques énormes, 3 millions d'enregistrements plus, des jeux de données dans la même application que je ne voudrais pas décharger.
À partir de la version 1.1, la commande Django dumpdata
] vous permet de vider des données de tables individuelles:
./manage.py dumpdata myapp1 myapp2.my_model
Vous pouvez également séparer plusieurs applications et modèles sur la ligne de commande. Voici la définition canonique:
Django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]
Comme indiqué, vous ne pouvez pas faire cela via une commande manage.py dans Django 1.0. Cependant, vous pouvez utiliser un script pour exporter le fichier JSON et le charger à l'aide de loaddata
:
from Django.core import serializers
from myproject.myapp import models
data = serializers.serialize("json", models.MyModel.objects.all())
out = open("mymodel.json", "w")
out.write(data)
out.close()
Je pense que vous aviez la solution dans votre question. Vous pouvez vider un modèle individuel comme ceci:
./manage.py dumpdata myapp.my_model
Prenez toutes les données au format json à partir du modèle Django.
Syntaxe:
python manage.py dumpdata app_name.model_name
Pour exemple dumping les données du modèle group_permission qui résident dans l'application d'authentification par défaut dans Django.
python manage.py dumpdata auth.group_permission
Pour la sortie, jetez un oeil sur console.
Pour réussir, je devais le dire deux fois et spécifier le modèle deux fois, par exemple:
./manage.py dumpdata myapp2.my_model myapp2.my_model
Si seulement je disais
./manage.py dumpdata myapp2 myapp2.my_model
J'ai été inondé de tous les modèles dans myapp2, malgré le fait que j'ai spécifié my_model.
Pour contourner le problème, vous pouvez créer une autre application et copier le modèle, mais pointez-la vers la table existante avec l'option méta db_table. Ensuite, vous pouvez simplement vider les modèles que vous avez copiés dans la nouvelle application. Votre application existante ne serait pas affectée.
J'ai créé une commande de gestion qui permet de générer un appareil par modèle. Les programmes peuvent être générés en exécutant:
./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json
code à: https://Gist.github.com/239488