From cb757ddd38140db43df5bb04d12d3fa3a27ea149 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 4 Feb 2021 16:50:38 +0100 Subject: [PATCH] api: check members presence before removing them (#50861) It prevents the trigger of unneeded m2m_changed signals. --- src/authentic2/api_views.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/authentic2/api_views.py b/src/authentic2/api_views.py index a4a6f356..9773699a 100644 --- a/src/authentic2/api_views.py +++ b/src/authentic2/api_views.py @@ -921,7 +921,9 @@ class RoleMembershipAPI(ExceptionHandlerMixin, APIView): status=status.HTTP_201_CREATED) def delete(self, request, *args, **kwargs): - self.role.members.remove(self.member) + # prevent useless m2m_changed signals + if self.role.members.filter(id=self.member.id): + self.role.members.remove(self.member) return Response({'result': 1, 'detail': _('User successfully removed from role')}, status=status.HTTP_200_OK) @@ -978,7 +980,9 @@ class RoleMembershipsAPI(ExceptionHandlerMixin, APIView): status=status.HTTP_201_CREATED) def delete(self, request, *args, **kwargs): - self.role.members.remove(*self.members) + # prevent useless m2m_changed signals + members_to_delete = self.role.members.filter(id__in=[member.id for member in self.members]) + self.role.members.remove(*members_to_delete) return Response( { 'result': 1, -- 2.30.0