我正在尝试更新一个模型,该模型的字段数量多于我想要传递给它的字段数量。我已阅读 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__'
我终于想通了,并相信这是最好的方法——如果不是,我会接受反馈。我必须创建一个新视图,扩展 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)