Robię jakiś rodzaj refaktoryzacji dla mojego projektu, w którym polegam na modelu django django.contrib.auth.models.Permission
. Do tej pory definiuję uprawnienia dla każdego nowego użytkownika za pomocą sygnału post_save, więc kiedy użytkownik jest tworzony, przypisuję jego uprawnienia przy użyciu user.user_permissions.add(the_permission)
, działa to idealnie.definiowanie niestandardowego sygnału post_migrate
Teraz chcę użyć modelu , aby sklasyfikować uprawnienia, które powinien posiadać użytkownik.
To jest mój kod:
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)
Po zdefiniować ten kod, ja oczekuję, że po wywołaniu ./manage.py migrate
uchwyt ten powinien zostać zwolniony. Ale to się nie stanie, wszystko co mam to:
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'
znajdę ten https://groups.google.com/forum/#!topic/django-developers/8MdaWtJp4VQ artykuł, mówią powinienem określić mój obsługi post_migrate wewnątrz pliku o nazwie management.py
(ani tym kodu w pliku models.py
), ale nie działa.
Wreszcie, oto moje pytanie: Gdzie powinienem umieścić ten kod dla mojego niestandardowego sygnału post_migrate?
Z góry dziękuję.
W jaki sposób mówisz Django, aby używał 'MyAppConfig'? W ustawieniu 'INSTALLED_APPS'? – Alasdair
Właściwie po prostu dodanie nazwy aplikacji do krotki "INSTALLED_APPS" powinno być wystarczające, czy powinienem dodać kolejną konfigurację? – slackmart