Python DRFAPI返回一个带有过滤列表的列表
返回的数据是一个包含所有字段的列表。我希望数据在主列表中的不同列表中分开。例如,在今天之前过滤的数据列表和在今天之后过滤的数据列表。我可以编写两个端点并在queryset中过滤数据,但这需要两个单独的API调用 视图集: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
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来满足我的需要。谢谢你的回答