Supprimer pk champ de django d'objets sérialisés
Je suis de la sérialisation d'un tas d'objets:
json = serializers.serialize("json", objects, fields=('name', 'country'))
Je n'ai pas inclus " pk " dans ma liste de champs, mais le produit JSON comprend une clé primaire avec chaque objet sérialisé. Je ne veux pas que mon API pour exposer les clés primaires pour le grand public.
Court de munging la sortie JSON, ce qui est la façon correcte de le dire serializers.serialze()
de ne pas inclure la clé primaire?
- Reich, Qu'avez-vous à faire sur celui-ci? Il y a un billet qui en parle @ code.djangoproject.com/ticket/4656
- J'ai fini par appeler simplejson manuellement
Vous devez vous connecter pour publier un commentaire.
J'ai fini de travailler autour de cela en "manuellement" à réaliser ce que je voulais à l'aide de la sous-jacentes
simplejson
sérialiseur:Un peu plus de taper, mais qui fonctionne.
Ce que Josh l'a fait, mais à l'envers:
de cette façon, vous n'avez pas à vous soucier de mettre à jour le code lors de l'ajout de champs supplémentaires dans le futur.
Vous pouvez également remplacer sérialiseur JSON comme expliqué ici: Remplacer Django Objet Sérialiseur pour se débarrasser de modèle spécifié
Bien que c'est une vieille question, quelqu'un d'autre va probablement venir avec elle sur une recherche Google.
Malheureusement, le django sérialiseur offre assez peu de personnalisation comme ce que vous avez défini. Ma solution, si vous savez que vous allez être en utilisant beaucoup de sérialisation pour votre projet, était simplement la copie de django reinhardt, la sérialisation des trucs sur mon propre projet et de faire quelques petits changements. Ce n'est pas l'idéal, mais il fait le travail. Plus précisément, pour supprimer le pk, il y a une ligne dans start_object(auto, obj):
Enlever le "pk" ligne devrait résoudre le problème. C'est un peu sale hack, puisque, si elles améliorer plus tard, il peut nécessiter certaines modifications à votre point de vue, mais pour moi c'était le plus facile moyen de contourner les limitations.
Espère que cela aide quelqu'un.
J'ai eu le même problème, j'ai donc créé mon propre
Serializer
, l'héritage de Sérialiseur de Django.Je voudrais seulement du champ de données, j'ai donc remplacer la méthode
get_dump_object
, et a ajouté l'PK champ.Et appel:
Ne pas perdre notre temps à essayer de "nettoyer" le PK est. Lorsque nous produisons un JSON enregistrement, le PK est là, et l'utilisateur peut ignorer si elles le veulent. Ils ne peuvent pas faire n'importe quoi avec l'information, il est donc juste de l'encombrement.
Aucun de nos interfaces de services web permettent à quiconque de fournir un PK de nouveau à nous. Nous n'POST, PUT et DELETE recherches sur d'autres domaines, mais pas le PK.
Le HTML, cependant, montre le PK est l'URL de tous les temps. Il permet aux gens de marquer les pages.
Le laid (mais de travail) de manière à :