django - 修改结果列表 API django-rest-framework
问题描述
我正在使用 django-rest-framework 为我的模型创建 API 休息,在我的模型上我保存了一系列日期(开始和结束),但在 API 列表中我需要按日期输入。
#serializers.py
class ShceduleSerializer(FlexFieldsModelSerializer):
class Meta:
model = Shcedule
fields = ['id', 'start', 'end', 'user']
#viewsets.py
class ShceduleViewSet(FlexFieldsModelViewSet):
queryset = Shcedule.objects.all()
serializer_class = ShceduleSerializer
现在,我有这样的事情:
"results": [
{
"id": 1,
"start": "2020-05-25",
"end": "2020-05-29",
"user": 50
},
但我需要按日期输入
"results": [
{
"id": 1,
"date": "2020-05-25",
"user": 50
},
{
"id": 1,
"date": "2020-05-26",
"user": 50
},
{
"id": 1,
"date": "2020-05-27",
"user": 50
},
{
"id": 1,
"date": "2020-05-28",
"user": 50
},
{
"id": 1,
"date": "2020-05-29",
"user": 50
},
解决方案
您可以覆盖该list()
方法以更改对您的需求的响应。例如:
class ShceduleViewSet(FlexFieldsModelViewSet):
queryset = Shcedule.objects.all()
serializer_class = ShceduleSerializer
def list(self, request, *args, **kwargs):
schedule_results = super().list(request=request).data
day_delta = datetime.timedelta(days=1)
for schedule in schedule_results['results']:
start_date = schedule['start']
end_date = schedule['end']
schedule_objects = {'results': []}
for i in range((end_date - start_date).days):
schedule_objects['results'].append({
"id": schedule['id'],
"date": start_date + i*day_delta,
"user": schedule['user']
})
output = schedule_objects
return Response(output, status=status.HTTP_200_OK)
推荐阅读
- javascript - 如何使用 JavaScript 在 HTML 中显示数组元素
- c++ - 用 getline() 定界
- reactjs - React BrowserRouter:位置未定义
- python - 如何使用 MariaDB 制作 Tkinter GUI 应用程序,在不安装 MariaDB 的情况下在其他 PC 上工作?
- html - 如何从 Wordpress 5.8.1 中的联系人 7 制作 html 联系人表单?
- javascript - 如何在反应原生 webview 中显示弹出选项卡?
- node.js - 如何使用访问令牌获取 Pinterest 登录用户详细信息
- python - 如何在 python(scikit、numpy、pill)中缩放(重新缩放)图像?
- vba - 在 MS Access 中的列中包含特定值的筛选器 ID
- java - IntelliJ 社区 maven pom.xml 错误提示黄瓜 jar 版本冲突