使用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