I'm doing some kind of refactoring for my project, where I'm relying on the django django.contrib.auth.models.Permission
model. So far I define the permissions for each new user using a post_save signal, so when the user is created, I assign their permissions using user.user_permissions.add(the_permission)
, this works perfectly.
Now I want to use the django.contrib.auth.models.Group
model to clasify the permissions a user should have.
This is my code:
from django.apps import AppConfig
from django.db.models.signals import post_migrate
from django.contrib.auth.models import Group, Permission
def create_group(name, permissions):
group = Group.objects.create(name=name)
[group.permissions.add(permission) for permission in permissions]
def define_company_groups(sender, **kwargs):
permissions = [
Permission.objects.get(codename='add_mymodel'),
Permission.objects.get(codename='change_mymodel'),
]
create_group('managers', permissions)
class MyAppConfig(AppConfig):
name = 'players'
verbose_name = 'The players app'
def ready(self):
post_migrate.connect(define_company_groups, sender=self)
After define this code, I'm expecting that after call ./manage.py migrate
this handler should be fired. But it doesn't happen, all I got is:
Running post-migrate handlers for application players
Adding permission 'players | mymodel | Can add mymodel'
Adding permission 'companies | company | Can change mymodel'
Adding permission 'companies | company | Can delete company'
I found this https://groups.google.com/forum/#!topic/django-developers/8MdaWtJp4VQ article, they say I should define my post_migrate handler inside a file named management.py
, but it does not work for me.
Finally, here's my question: Where should I put this code for my custom post_migrate signal?
MyAppConfig
? In yourINSTALLED_APPS
setting? – MarcinINSTALLED_APPS
tuple, Should be sufficient or should I add another config? – Shushan