Django REST框架序列化器无需模型

104

我正在处理几个聚合数据的端点。其中一个端点将返回一个对象数组,每个对象对应某一天,它将包含该用户发布的评论、点赞和照片数量。这个对象有预定义/设置的模式,但我们没有在数据库中存储它,因此它没有模型。

是否有办法在没有模型的情况下仍然可以使用Django序列化器来处理这些对象?


2
你可以使用 serializers.Serializer... - zaidfazil
1个回答

204
您可以创建一个继承自serializers.Serializer的序列化器,并将您的数据作为第一个参数传递,例如:

serializers.py

from rest_framework import serializers

class YourSerializer(serializers.Serializer):
   """Your data serializer, define your fields here."""
   comments = serializers.IntegerField()
   likes = serializers.IntegerField()

视图.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)

14
有用的回答!这里有文档: http://www.django-rest-framework.org/api-guide/serializers/ - Chris
3
在这种情况下,您是否可以向YourSerializer添加计算字段? - Shrikanth Kalluraya
这个完美地运行了!我想将一些常量值的元组列表暴露给API端点。我必须将它们转换为对象列表,但那是视图类中我所需要的全部更改。 - NurShomik
我遇到了“AssertionError:未指定basename参数,并且无法从视图集中自动确定名称,因为它没有.queryset属性。”的错误,参考了这个答案。你有什么建议吗? - Harsha Biyani
像这样添加basename:router.register(r'my-model/', MyModelView, basename='MyModel') - Harsha Biyani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接