Alternative à la commande dumpdata de django

La sortie json de manage.py dumpdata de django n'était pas bonne car le japonais était échappé et les noms de champ étaient dans le désordre dans le modèle, j'ai donc utilisé interactif à la place. (Le nom du modèle est différent du nom réel par exemple)

>>> import json
>>> from collections import OrderedDict
>>> from django.core.serializers.json import DjangoJSONEncoder
>>> from account.models import User
>>> users = list(User.objects.all().order_by('id'))
>>> field_names = ["name", "birthday", "description"]
>>> a = [OrderedDict([("pk", user.pk), ("model", "account.user"), ("fields", OrderedDict([(name, getattr(user, name)) for name in field_names]))]) for user in users]
>>> print json.dumps(a, cls=DjangoJSONEncoder, indent=2)

Le point est

--Json.dump de OrderedDict garde l'ordre --cls = DjangoJSONEncoder est requis pour afficher datetime

Autour.

Le nom du champ doit être extrait des attributs du modèle, afin qu'il puisse être plus généralisé.

(Une addition)

Le japonais s'échappe

Après tout, ce problème est résolu ad hoc en collant la sortie une fois dans le shell de Python 3.

Recommended Posts

Alternative à la commande dumpdata de django
Poésie - Une alternative à Pipenv
Commande pour générer un code QR
Comment faire fonctionner GeoIp2 de Django
[systemd] Commande pour supprimer le service
Introduction à la commande vi (Remarque)
Commande pour créer Linux Live USB
Dans la commande python, python pointe vers python3.8
Comment utiliser MBDyn (paramètre de commande)
[linux] commande kill pour tuer le processus
Exécutez le script avec la commande admin de Django
[Django] Commande pour générer QuerySet en csv
Ajouter des paramètres aux commandes personnalisées de Django
Une alternative à `pause` en Python