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)
Share:
49,334

Related videos on Youtube

Farid El Nasire
Author by

Farid El Nasire

Updated on July 08, 2022

Comments

  • Farid El Nasire
    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
      zaidfazil almost 7 years
      You could use serializers.Serializer...
  • Chris
    Chris about 6 years
  • Shrikanth Kalluraya
    Shrikanth Kalluraya over 3 years
    In this case is possible to add calculated field to YourSerializer?
  • NurShomik
    NurShomik over 2 years
    This 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
    Harsha Biyani almost 2 years
    I 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
    Harsha Biyani almost 2 years
    router.register(r'my-model/', MyModelView, basename='MyModel') add basename like this