python - How to serialize Django queryset.values() into json?

ID : 131376

viewed : 7

Tags : pythonjsondjangodjango-modelsdjango-serializerpython

Top 5 Answer for python - How to serialize Django queryset.values() into json?

vote vote


As other people have said, Django's serializers can't handle a ValuesQuerySet. However, you can serialize by using a standard json.dumps() and transforming your ValuesQuerySet to a list by using list(). If your set includes Django fields such as Decimals, you will need to pass in DjangoJSONEncoder. Thus:

import json from django.core.serializers.json import DjangoJSONEncoder  queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3') serialized_q = json.dumps(list(queryset), cls=DjangoJSONEncoder) 
vote vote


Django serializers can only serialize queryset, values() does not return queryset rather ValuesQuerySet object. So, avoid using values(). Rather, specifiy the fields you wish to use in values(), in the serialize method as follows:

Look at this SO question for example

objectQuerySet = ConventionCard.objects.filter(ownerUser = user) data = serializers.serialize('json', list(objectQuerySet), fields=('fileName','id')) 

Instead of using objectQuerySet.values('fileName','id'), specify those fields using the fields parameter of serializers.serialize() as shown above.

vote vote


Make list from objectQuerySet:

data_ready_for_json = list( ConventionCard.objects.filter(ownerUser = user).values('fileName','id') ) 
vote vote


My solution, It's work fine

from django.core.serializers import serialize import json  permission_list = Permission.objects.all().order_by('-id') permission_serialize= json.loads(serialize('json', permission_list)) return JsonResponse({'data': permission_serialize}) 
vote vote


Just cast to dict every item and create json with json.dumps:

json.dumps([dict(item) for item in SomeModel.objects.all().values('id', 'title')]) 

Top 3 video Explaining python - How to serialize Django queryset.values() into json?