@receiver(post_migrate) def post_post_migrate(sender=None, verbosity=0, **kwargs): # check one of your installed apps to ensure that the script runs only once # this is important because post_migrate is fired for all apps even when migrating a specific app if sender.name != 'myapps.administration': return # Put your code here. group_perms = { u'staff': { 'apps': (u'fees', ) }, u'users': { 'apps': ('tpes',) }, u'admin': { 'apps': ('administration',) } for group_name in group_perms.keys(): print 'adding permissions for {0}'.format(group_name) group = Group.objects.get(name=group_name) for app_label in group_perms[group_name]['apps']: for content_type in ContentType.objects.filter(app_label=app_label): for perm in Permission.objects.filter(content_type=content_type): group.permissions.add(perm) group.save()