使用ModelViewSet
可以自动生成删除单个资源的方法,删除的url
是/resource_name/pk/
。如果想要批量删除可以写继承APIView
的类,自定义delete
方法,如果使用ModelViewSet
的话可以在类里面写一个批量删除的函数:
from rest_framework.decorators import action
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
@action(methods=['delete'], detail=False)
def multiple_delete(self, request, *args, **kwargs):
delete_id = request.query_params.get('deleteid', None)
if not delete_id:
return Response(status=status.HTTP_404_NOT_FOUND)
for i in delete_id.split(','):
get_object_or_404(User, pk=int(i)).delete()
return Response(status=status.HTTP_204_NO_CONTENT)
action
装饰器使multiple_delete
方法接受delete
操作,detail=False
使得在users/
后面直接跟方法名而不用加/pk/
api/user/multiple_delete/?deleteid=1,2,3
这样就可以了。