Django REST framework serializer without a model
49,334
You can create a serializer that inherits from serializers.Serializer and pass your data as the first parameter like:
serializers.py
from rest_framework import serializers
class YourSerializer(serializers.Serializer):
"""Your data serializer, define your fields here."""
comments = serializers.IntegerField()
likes = serializers.IntegerField()
views.py
from rest_framework import views
from rest_framework.response import Response
from .serializers import YourSerializer
class YourView(views.APIView):
def get(self, request):
yourdata= [{"likes": 10, "comments": 0}, {"likes": 4, "comments": 23}]
results = YourSerializer(yourdata, many=True).data
return Response(results)
Related videos on Youtube
Author by
Farid El Nasire
Updated on July 08, 2022Comments
-
Farid El Nasire almost 2 years
I'm working on a couple endpoints which aggregate data. One of the endpoints will for example return an array of objects, each object corresponding with a day, and it'll have the number of comments, likes and photos that specific user posted. This object has a predefined/set schema, but we do not store it in the database, so it doesn't have a model.
Is there a way I can still use Django serializers for these objects without having a model?
-
zaidfazil almost 7 yearsYou could use
serializers.Serializer
...
-
-
Chris about 6 yearsuseful answer! Docs here: django-rest-framework.org/api-guide/serializers
-
Shrikanth Kalluraya over 3 yearsIn this case is possible to add calculated field to YourSerializer?
-
NurShomik over 2 yearsThis worked perfectly! I wanted to expose a list of tuples with some constant values to an API endpoint. I had to convert them into a list of objects, but that was all the change I needed in the view class.
-
Harsha Biyani almost 2 yearsI am getting
AssertionError:
basename` argument not specified, and could not automatically determine the name from the viewset, as it does not have a.queryset
attribute.` by referring this answer. Do you have any pointers? -
Harsha Biyani almost 2 years
router.register(r'my-model/', MyModelView, basename='MyModel')
add basename like this