Ich mache eine Art Refactoring für mein Projekt, wo ich auf das Modell Django django.contrib.auth.models.Permission
angewiesen bin. Bisher definiere ich die Berechtigungen für jeden neuen Benutzer mit einem post_save-Signal, also wenn der Benutzer erstellt wird, ich ihre Berechtigungen mit zuweisen, funktioniert das perfekt.Definieren eines benutzerdefinierten post_migrate Signals
Jetzt möchte ich das Modell verwenden, um die Berechtigungen zu klassifizieren, die ein Benutzer haben sollte.
Dies ist mein 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)
Nach diesem Code definieren, erwarte ich, dass nach Aufruf ./manage.py migrate
diese Handler ausgelöst werden sollen. Aber es geschieht nicht, alles was ich habe ist:
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'
Ich finde diese https://groups.google.com/forum/#!topic/django-developers/8MdaWtJp4VQ Artikel, sie sagen, ich soll meinen post_migrate Handler management.py
innerhalb einer Datei definieren genannt (weder mit dem Code in der Datei models.py
), aber funktioniert nicht.
Schließlich, hier ist meine Frage: Wo sollte ich diesen Code für meine benutzerdefinierte post_migrate Signal?
Vielen Dank im Voraus.
Wie sagen Sie Django, 'MyAppConfig' zu verwenden? In deiner 'INSTALLED_APPS' Einstellung? – Alasdair
Eigentlich nur durch Hinzufügen der App-Name zum 'INSTALLED_APPS' Tupel, sollte ausreichend sein oder sollte ich eine andere Konfiguration hinzufügen? – slackmart