Я делаю какой-то рефакторинг для своего проекта, где полагаюсь на модель django django.contrib.auth.models.Permission
. До сих пор я определяю разрешения для каждого нового пользователя, используя сигнал post_save, поэтому, когда пользователь создается, я назначаю его разрешения, используя user.user_permissions.add(the_permission)
, это работает отлично.
Теперь я хочу использовать модель django.contrib.auth.models.Group
для классификации прав, которые должен иметь пользователь.
Это мой код:
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)
После определения этого кода я ожидаю, что после вызова ./manage.py migrate
этот обработчик должен быть запущен. Но этого не происходит, все, что я получил, это:
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'
Я нашел эту https://groups.google.com/forum/#!topic/django-developers/8MdaWtJp4VQ статью, они говорят, что я должен определить свой обработчик post_migrate в файле с именем management.py
, но он не работает для меня.
Наконец, вот мой вопрос: Где я должен поместить этот код для моего пользовательского сигнала post_migrate?