Python DRFAPI返回一个带有过滤列表的列表

Python DRFAPI返回一个带有过滤列表的列表,python,django,api,django-rest-framework,Python,Django,Api,Django Rest Framework,返回的数据是一个包含所有字段的列表。我希望数据在主列表中的不同列表中分开。例如,在今天之前过滤的数据列表和在今天之后过滤的数据列表。我可以编写两个端点并在queryset中过滤数据,但这需要两个单独的API调用 视图集: class StudyPageViewSet(viewsets.ModelViewSet): """ Study create, read, update, delete over API. """ model = Study seria

返回的数据是一个包含所有字段的列表。我希望数据在主列表中的不同列表中分开。例如,在今天之前过滤的数据列表和在今天之后过滤的数据列表。我可以编写两个端点并在queryset中过滤数据,但这需要两个单独的API调用

视图集:

class StudyPageViewSet(viewsets.ModelViewSet):
    """
    Study create, read, update, delete over API.
    """
    model = Study
    serializer_class = StudyPageSerializer
    permission_classes = (IsAuthenticated, IsAuthorPermission,)

    def get_queryset(self):
        return Study.on_site.all()
序列化程序:

class StudyPageSerializer(serializers.ModelSerializer):

    class Meta:
        model = Study
        fields = ('id', 'title', 'date', 'location')
        read_only_fields = ('id',)
结果应该是:

[ 
   { 
      "list_before_today":[ 
         { 
            "id":"5001",
            "title":"None"
         },
         { 
            "id":"5002",
            "title":"Glazed"
         },

      ]
   },
   { 
      "list_after_today":[ 
         { 
            "id":"5003",
            "title":"None"
         },
         { 
            "id":"5004",
            "title":"Glazed"
         },

      ]
   },

]
电流输出:

[
    {
        "id": 588,
        "title": "title",
        .. : ..
    },
    {
        "id": 590,
        "title": "title2",
        .. : ..
    },
]

注:点代表其他字段。

默认情况下,当您在
ModelViewSet
视图中调用GET request时,它将调用
list
方法。在list方法内部,Rest框架确实使用
模型
创建查询集来查询数据,然后将其传递到
序列化程序
来序列化数据,然后返回数据,这就是为什么会出现这种情况:

[
{
“id”:588,
“头衔”:“头衔”,
.. : ..
},
{
“id”:590,
“标题”:“标题2”,
.. : ..
},
]
因此,要获得预期的响应,您必须覆盖
list
方法,以获得预期格式的响应,如下所示:

from datetime导入日期
从rest\u框架导入状态
类StudyPageViewSet(viewsets.ModelViewSet):
"""
通过API学习创建、读取、更新和删除。
"""
模型=研究
serializer\u class=StudyPageSerializer
权限\u类=(IsAuthenticated,IsAuthorPermission,)
def get_queryset(自我):
返回研究。现场。全部()
def列表(自我、请求):
queryset=self.get_queryset()
今天=日期。今天()
输出=[{
“在今天之前列出”:self.get\u序列化程序(queryset.filter(date\uu lt=today),many=True)
}, {
“今天之后列出”:self.get\u序列化程序(queryset.filter(date\u gt=today),many=True)
}]
返回响应(输出,状态=status.HTTP\u 200\u OK)
这正是您的想法,因此您必须与您的代码保持一致,以使其正常工作。我也不建议您这样做,因为Django Rest框架对
ModelViewSet
进行了很好的定义,如果您想得到该响应,还可以创建另一个APIView来处理


希望有帮助

你能展示一下当前的回答格式吗?@Toankocho是的,当然,我会把它添加到问题中。最后,我使用了一个ReadOnlyViewset来满足我的需要。谢谢你的回答