from django.dispatch import receiver from django.db.models.signals import pre_save from django.contrib.auth.models import Permission from .models import ServiceType @receiver(pre_save, sender=ServiceType) def update_user_permissions(sender, instance, raw, **kwargs): perms = [ 'add_user', 'change_user', 'change_profile', 'add_adherent', 'change_adherent', 'add_payment', 'change_payment', 'delete_payment', 'change_service', ] try: old_group = ServiceType.objects.get(pk=instance.pk).group except ServiceType.DoesNotExist: old_group = None new_group = instance.group perms = Permission.objects.filter(codename__in=perms).all() if old_group is None and new_group is not None: # add permissions to new_group new_group.permissions.add(*perms) elif old_group is not None and new_group is None: # remove permissions from old_group *if not needed elsewhere* if not old_group.service_types.exclude(pk=instance.pk).exists(): old_group.permissions.remove(*perms)