2010-06-21 3 views
3

J'ai une fonction d'affichage qui rend json. Je suis capable de spécifier quelles colonnes je veux dans mon json mais je ne sais pas comment changer le nom des champs clés. Comme le champ "pk" devrait être "id".Suppression de champs de json

J'utilise ce contrôle de saisie semi-automatique (http://loopj.com/2009/04/25/jquery-plugin-tokenizing-autocomplete-text-entry/) et certains champs sont requis par json.

from django.http import HttpResponse 
from django.shortcuts import render_to_response 
from iCookItThisWay.recipes import models 
from django.core import serializers 
from django.utils import simplejson 

def index(request, template_name): 
    meal_types = [] 
    q = '' 

    if 'q' in request.GET and request.GET['q']: 
     q = request.GET['q'] 

    if len(q) > 0: 
     meal_types = models.MealType.objects.filter(name__istartswith=q) 

    json_serializer = serializers.get_serializer("json")() 
    sdata = json_serializer.serialize(meal_types, ensure_ascii=False, fields = ('id', 'name')) 

    return HttpResponse(simplejson.dumps(sdata), mimetype='application/json') 

Pourriez-vous également me diriger vers une documentation? Je sens que je suis une merde à trouver de la documentation.

Répondre

1

Au lieu d'utiliser le sérialiseur, vous pouvez construire un dict et manuellement le convertir en JSON via .dumps()

meal_types = models.MealType.objects.filter(name__istartswith=q) 
results = [] 
for meal_type in meal_types: 
    results.append(
     {'id': meal_type.id, 
     'name': meal_type.name}) 

return HttpResponse(simplejson.dumps(results), mimetype='application/json') 

Vous pouvez aussi construire les résultats avec une compréhension de la liste, car il y a seulement quelques des champs:

results = [{'id': mt.id, 'name': mt.name} for mt in meal_types] 
Questions connexes