Search code examples
pythonjsondjangodjango-modelsdjango-serializer

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


I have a model that has many fields, however for this problem I only need 3 of those fields. When I try to serialize a .values set I get an exception:

'dict' object has no attribute '_meta'

This is my code:

queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = serializers.serialize('json', queryset, ensure_ascii=False)

Solution

  • 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.