【问题标题】:Django rest framework : Do not return array but list of objects with id as keyDjango rest框架:不返回数组,而是以id为键的对象列表
【发布时间】:2016-10-05 15:26:53
【问题描述】:

Django rest 框架在 API 端点返回以下输出

  [
    {
        "id": "QFELD_2.3.2.QF1",
        "siteuxid": "VBKM02_Abschlusstest",
        "section": 2,
        "maxpoints": 4,
        "intest": true,
        "uxid": "KA0",
        "points": 0,
        "value": 0,
        "rawinput": "",
        "state": 3
    },
    {
        "id": "QFELD_2.3.2.QF2",
        "siteuxid": "VBKM02_Abschlusstest",
        "section": 2,
        "maxpoints": 4,
        "intest": true,
        "uxid": "KA1",
        "points": 0,
        "value": 0,
        "rawinput": "",
        "state": 3
    }, 
...

是否可以以列表对象格式返回数据,例如:

  {
    "QFELD_2.3.2.QF1" : {
        "siteuxid": "VBKM02",
        "section": 2,
        "maxpoints": 4,
        "intest": true,
        "uxid": "KA0",
        "points": 0,
        "value": 0,
        "rawinput": "",
        "state": 3
    },
    "QFELD_2.3.2.QF2" : {
        "siteuxid": "VBKM02",
        "section": 2,
        "maxpoints": 4,
        "intest": true,
        "uxid": "KA1",
        "points": 0,
        "value": 0,
        "rawinput": "",
        "state": 3
    },
...

我的序列化器是:

class ScoreSerializer(serializers.ModelSerializer):
    id = serializers.CharField(required=False, allow_blank=True, max_length=100, source='q_id')
    class Meta:
        model = Score
        fields = ('id', 'siteuxid', 'section', 'maxpoints', 'intest', 'uxid', 'points', 'value', 'rawinput', 'state')

而视图是:

class ScoreViewSet(viewsets.ModelViewSet):

    serializer_class = ScoreSerializer

【问题讨论】:

    标签: django serialization django-rest-framework


    【解决方案1】:

    ListMixin 代码 a 是开始的好地方。您应该得到序列化程序的结果并根据需要对其进行转换。

    class ListModelMixin(object):
        """
        List a queryset.
        """
        def list(self, request, *args, **kwargs):
            queryset = self.filter_queryset(self.get_queryset())
    
            page = self.paginate_queryset(queryset)
            if page is not None:
                serializer = self.get_serializer(page, many=True)
                # Might need to change this not to transform all the data
                data = {i['id']: i for i in serializer.data}
                return self.get_paginated_response(data)
    
            serializer = self.get_serializer(queryset, many=True)
            data = {i['id']: i for i in serializer.data}
            return Response(data)
    

    【讨论】:

    • 举个例子就好了
    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2018-05-22
    • 2016-01-16
    • 2021-09-27
    • 2017-02-02
    • 2023-03-20
    相关资源
    最近更新 更多