from django.dispatch import receiver from django.db.models.signals import post_save from django.apps import apps from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import Permission from event.models import Event, EventGroup from guardian.shortcuts import assign_perm @receiver(post_save, sender=Event) def create_groups_for_event(sender, **kwargs): event, created = kwargs["instance"], kwargs["created"] if created: orgas = EventGroup.objects.create( name="{}_orgas".format(event.slug), event=event ) # Models having event-specific permissions models = [model for model in apps.get_models() if getattr(model, 'needs_event_permissions', False)] for model in models: for perm in Permission.objects.filter( content_type=ContentType.objects.get_for_model(model) ): print(perm.codename) assign_perm(perm.codename, orgas, event) EventGroup.objects.create( name="{}_participants".format(event.slug), event=event, )