web-dev-qa-db-fra.com

Django dump des données pour un seul modèle?

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.

123
nategood

À 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] ...]]
213
simplyharsh

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()
95
dar

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
6
Harold

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.

6
Shubho Shaha

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.

4
Csaba Toth

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.

1
Ogre Codes

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

1
Jonas Geiregat