179 votes

Django vide les données d'un seul modèle ?

Puis-je effectuer un dumpdata en 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 veux qu'un modèle spécifique, tel que "myapp.mymodel", soit vidé. La raison en est que j'ai quelques énormes ensembles de données (plus de 3 millions d'enregistrements) dans la même application que je ne voudrais pas voir vidés.

1 votes

Je trouve que votre question n'est pas facile à comprendre. Vous voulez charger un dump SQL dans votre base de données ? Ou vous voulez faire une sorte de toString() sur une instance d'un modèle ?

297voto

simplyharsh Points 11663

À partir de la version 1.1 et des versions ultérieures, l'application Django dumpdata vous permet de vider les 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] ...]]

20 votes

Gath, je n'ai pas compris le vote négatif sur un post qui a presque 2 ans. De plus, le code ci-dessus fonctionnait bien même avec la v1.1. Les nouvelles fonctionnalités dans les nouvelles versions ne rendent pas les anciennes réponses invalides.

1 votes

Et comment ajouter ces données à une autre instance de l'application ?

5 votes

Pour rendre le json lisible par l'homme, utilisez le drapeau --indent 4 après dumpdata

117voto

dar Points 4508

Comme indiqué, vous ne pouvez pas le faire via une commande manage.py dans Django 1.0. Cependant, vous pouvez utiliser un script pour exporter le fichier JSON, et le charger en utilisant la commande 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()

7 votes

C'est un excellent script parce que vous pouvez être encore plus granulaire si vous le souhaitez. Si vous faites plutôt un .filter(...) à la ligne trois ci-dessus, vous pouvez vider juste les enregistrements spécifiques que vous voulez.

6voto

Harold Points 2561

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

0 votes

J'ai essayé avant de poster. je n'ai pas eu de chance. je suis dans django 1.0. j'ai aussi essayé myapp.models.mymodel ?

1voto

Dennis Baker Points 3606

Comme solution de rechange, vous pouvez créer une autre application et copier le modèle mais le faire pointer vers la table existante avec l'option db_table meta. Ensuite, vous pouvez simplement transférer les modèles que vous avez copiés dans la nouvelle application. Votre application existante ne serait pas affectée.

1voto

Jonas Geiregat Points 1676

J'ai créé une commande de gestion permettant de générer un montage pour chaque modèle. Les montages peuvent être générés en exécutant :

./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json

code à : https://gist.github.com/2394883

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