Abh*_*hek 2 python django json django-rest-framework
我在 django Rest 框架项目中有一个 api.py 视图,编写如下:
class StudentAcademicProgramList2(APIView):
def get(self, request, format=None):
student_academic_program = Student_academic_program.objects.filter(student=2773951)
serialized_Student_academic_program = StudentAcademicProgramSerializer2(student_academic_program, many=True)
return Response(serialized_Student_academic_program.data)
def update(self, request, format=None):
student_academic_program = Student_academic_program.objects.filter(student=2773951)
serializer = StudentAcademicProgramSerializer2(student_academic_program, many=True)
for x in xrange(0,len(serializer.data)):
serializer.primary_program = False
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status = status.HTTP_201_CREATED)
return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)
def post(self, request, format=None):
serializer = StudentAcademicProgramSerializer2(data = request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status= status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, format=None):
student_academic_program = Student_academic_program.objects.filter(student=2773951)
student_academic_program.delete()
return Response(status = status.HTTP_204_NO_CONTENT)
Run Code Online (Sandbox Code Playgroud)
它获取到的json格式如下:
[
{
"id": 3684,
"student": 2773951,
"academic_program": 595,
"credits_completed": 28,
"academic_program_gpa": null,
"primary_program": false
},
{
"id": 3685,
"student": 2773951,
"academic_program": 596,
"credits_completed": 26,
"academic_program_gpa": null,
"primary_program": true
}
]
Run Code Online (Sandbox Code Playgroud)
每当我在 json api 中获取和发布一些数据时,这两个类都可以很好地工作。
我如何update()在 apiview 中编写一个函数,以便它更改所有primary_programjson 中的所有值更改为 false?由于 for 循环,我编写的更新函数将无法工作。我怎样才能改变这个功能?
编辑:
我尝试了 @Fabiano 的答案,但序列化器没有更新数据库中的任何内容。
小智 6
def update(self, request, *args, **kwargs):\n data = request.DATA\n qs = Student_academic_program.objects.filter(student=2773951)\n serializer = StudentAcademicProgramSerializer(qs, data=data, many=True)\n\n if serializer.is_valid():\n serializer.save()\n\n return Response(serializer.data)\n\n ...\nRun Code Online (Sandbox Code Playgroud)\n\n或者你可以允许用户做一个补丁,在这种情况下你只需要在序列化器构造函数上添加 \xc2\xb4partial=True\xc2\xb4 。\n如果你允许用户做一个补丁,那么用户可以更改仅primary_program 字段。
\n\n serializer = StudentAcademicProgramSerializer(qs, data=data, many=True, partial=True)\nRun Code Online (Sandbox Code Playgroud)\n\n您可以在文档中查看更多信息:\n http://www.django-rest-framework.org/api-guide/serializers#dealing-with-multiple-objects
\n