How to serialize Django queryset.values() into json?
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.
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)