gpt4 book ai didi

python - API View 中的 Django Rest 框架更新方法以更改 db json 中的值

转载 作者:行者123 更新时间:2023-11-30 23:23:19 25 4
gpt4 key购买 nike

我在 django Rest 框架项目中有一个 api.py View ,编写如下:

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)

它获取的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
}
]

每当我在 json api 中获取和发布一些数据时,这两个类都可以很好地工作。

如何在 apiview 中编写 update() 函数,以便将 json 中的所有 primary_program 值更改为 false?由于 for 循环,我编写的更新函数将无法工作。我怎样才能改变这个功能?

编辑:

我尝试了 @Fabiano 的答案,但序列化器没有更新数据库中的任何内容。

最佳答案

def update(self, request, *args, **kwargs):
data = request.DATA
qs = Student_academic_program.objects.filter(student=2773951)
serializer = StudentAcademicProgramSerializer(qs, data=data, many=True)

if serializer.is_valid():
serializer.save()

return Response(serializer.data)

...

或者您可以允许用户进行修补,在这种情况下,您只需在序列化器构造函数上添加“partial=True”即可。如果您允许用户打补丁,那么用户只能更改primary_program字段。

    serializer = StudentAcademicProgramSerializer(qs, data=data, many=True, partial=True)

您可以在文档中查看更多信息: http://www.django-rest-framework.org/api-guide/serializers#dealing-with-multiple-objects

关于python - API View 中的 Django Rest 框架更新方法以更改 db json 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24042439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com