Django DRF & 更新多个部分记录

问题描述 投票:0回答:1

我正在尝试更新一个模型,该模型的字段数量多于我想要传递给它的字段数量。我已阅读 DRF 文档,但没有找到正确的方法。我遇到过使用 UpdateModelMixin 但我似乎找不到成功实现它的方法。

到目前为止,我已经采取了一些方法,除了下面看到的方法之外,还包括使用 APIView。

最终,我希望将以下内容传递到我的视图并让它仅更新模型中的“订单”字段。我的模型有很多字段。

[
    {
        "id": "1",
        "order": "5"
    },
    {
        "id": "2",
        "order": "3"
    }
]

这是我的观点:

class WaitlistListGen(generics.ListCreateAPIView):
    queryset = Waitlist.objects.all()
    serializer_class = WaitlistSerializer


class WaitlistDetailGen(RetrieveUpdateDestroyAPIView):
    queryset = Waitlist.objects.all()
    serializer_class = WaitlistSerializer

而且,这是我的序列化器:

class WaitlistSerializer(serializers.ModelSerializer):

    class Meta:
        model = Waitlist
        fields = '__all__'
django django-rest-framework django-serializer
1个回答
0
投票

我终于想通了,并相信这是最好的方法——如果不是,我会接受反馈。我必须创建一个新视图,扩展 put 方法,并迭代数据。我用的是现有的

WaitlistSerializer
:

class WaitlistUpdateGen(generics.UpdateAPIView):
    serializer_class = WaitlistSerializer

    def put(self, request):
        waitlist_data = request.data
        for waitlist_item in waitlist_data:
            try:
                waitlist = Waitlist.objects.get(id=waitlist_item['id'])
            except Waitlist.DoesNotExist:
                return Response(status=status.HTTP_404_NOT_FOUND)

            serializer = self.serializer_class(
                waitlist, data=waitlist_item, partial=True)
            if serializer.is_valid():
                serializer.save()

        return Response(status=status.HTTP_200_OK)
© www.soinside.com 2019 - 2024. All rights reserved.