Kur*_*eek 3 python django django-rest-framework
我想为可以部分更新的对象创建REST API.在http://www.django-rest-framework.org/api-guide/serializers/#partial-updates上给出了在partial=True实例化序列化器时传递的示例:
# Update `comment` with partial data
serializer = CommentSerializer(comment, data={'content': u'foo bar'}, partial=True)
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,模型(被称为SessionType)具有以下视图集:
class SessionTypeViewSet(viewsets.ModelViewSet):
queryset = SessionType.objects.all()
serializer_class = SessionTypeSerializer
Run Code Online (Sandbox Code Playgroud)
序列化器定义为的位置
class SessionTypeSerializer(serializers.ModelSerializer):
class Meta:
model = SessionType
fields = ('title',)
Run Code Online (Sandbox Code Playgroud)
如何在此用例中调整序列化程序,以便partial始终如一True?
您无需以任何方式调整序列化程序.使用该视图集,使用PATCH方法对"详细信息"端点的任何调用都将进行部分更新.
Django Rest Framework ModelViewSet基类包括以下mixin.在这里,您可以看到partial=True调用时如何传递partial_update,默认情况下路由到PATCH方法:
class UpdateModelMixin(object):
"""
Update a model instance.
"""
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
if getattr(instance, '_prefetched_objects_cache', None):
# If 'prefetch_related' has been applied to a queryset, we need to
# refresh the instance from the database.
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
def perform_update(self, serializer):
serializer.save()
def partial_update(self, request, *args, **kwargs):
kwargs['partial'] = True
return self.update(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)