120 votes

Sortie du jeu de requêtes Django en JSON

Je veux sérialiser mon queryset, et je le veux dans un format tel que cette vue le produit :

class JSONListView(ListView):
    queryset = Users.objects.all()

    def get(self, request, *args, **kwargs):
        return HttpResponse(json.dumps({'data': [['bar','foo','bar','foo'],['foo','bar','foo','bar']]}, indent=4), content_type='application/json')

Je ne sais simplement pas comment sortir le queryset au lieu des données manuelles dans l'exemple.

J'ai essayé

json.dumps({"data": self.get_queryset()})

et

serializers.serialize("json", {'data': self.get_queryset()})

mais ça ne marche pas. Que dois-je faire de mal ? Dois-je créer un encodeur JSON personnalisé ?

1voto

nogabemist Points 47

Une autre façon de transformer un queryset en JSON, est d'ajouter les éléments nécessaires à une liste vide avec une boucle. Cela permet de concevoir un JSON personnalisable.

queryset = Users.objects.all()
output = []
for query in queryset:
   output.append('id': query.id, 'name': query.name, etc...)
return JSONResponse(output, safe=False)

-1voto

k15 Points 9

Essayez ça :

class JSONListView(ListView):
    queryset = Users.objects.all()

    def get(self, request, *args, **kwargs):
        data = {}
        data["users"] = get_json_list(queryset)
        return JSONResponse(data)

def get_json_list(query_set):
    list_objects = []
    for obj in query_set:
        dict_obj = {}
        for field in obj._meta.get_fields():
            try:
                if field.many_to_many:
                    dict_obj[field.name] = get_json_list(getattr(obj, field.name).all())
                    continue
                dict_obj[field.name] = getattr(obj, field.name)
            except AttributeError:
                continue
        list_objects.append(dict_obj)
    return list_objects

-3voto

Sujith suji Points 1
from django.http import JsonResponse

def SomeFunction():
       dict1 = {}

       obj = list( Mymodel.objects.values() )

       dict1['data']=obj

return JsonResponse(dict1)

Essayez ce code pour Django

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