2015-08-11 3 views
5

Im Folgenden finden Sie meinen Code in der Datei signals.py, die in dem Paket enthalten ist, in dem das Authentifizierungsmodell definiert ist. in Django 1.8, wie man den Absender für post_migrate und post_syncdb Signalempfänger setzt, wenn ein benutzerdefiniertes Benutzermodell eingestellt ist?

@receiver(post_migrate, sender=settings.AUTH_USER_MODEL) 
def define_groups(sender, **kwargs): 
    # Create groups 
    Group.objects.get_or_create(name='Promoter') 
    Group.objects.get_or_create(name='Client') 
    Group.objects.get_or_create(name='Superuser') 
    Group.objects.get_or_create(name='Staff') 

Die Dokumentation (https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#referencing-the-user-model) besagt, dass es als

sender=settings.AUTH_USER_MODEL 

während dies funktioniert nur für post_save gesetzt werden soll, wie in der Dokumentation Beispiel erwähnt.

Ich habe bereits versucht get_user_model() und auch direkt mit dem my_custom_user.models.

get_user_model() einen Fehler zurückgibt, während Modelle als Absender nur gut, wie funktioniert Einstellung -

from . import models 

@receiver(post_syncdb, sender=models) 
def define_groups(sender, **kwargs): 
    # Create groups 
    Group.objects.get_or_create(name='Promoter') 
    Group.objects.get_or_create(name='Client') 
    Group.objects.get_or_create(name='Superuser') 
    Group.objects.get_or_create(name='Staff') 

Aber nach Dokumentation ist dies nicht der richtige Weg, ein eigenes Benutzermodell beziehen und ist nur ein hässlicher Workaround.

Wäre jemand bitte in der Lage, mir mit einer Lösung zu helfen, damit ich diese Gruppen mit der ersten Migration des Benutzermodells hinzufügen kann.

Danke

EDIT: mit get_user_model() gibt den folgenden Fehler -

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet. 
+0

Hallo @ RA123, ich versuche, das gleiche Problem zu archivieren, aber mein benutzerdefiniertes Signal wird nicht ausgelöst. Jeder Vorschlag ist willkommen. Danke im Voraus. – slackmart

Antwort

7

Die sender für die post_migrate Methode ist nie ein Modell (Gewohnheit oder auf andere Weise), es ist die AppConfig Instanz für die App, die installiert wurde.

Die Dokumentation enthält das folgende Beispiel für die Verbindung Ihres Signalhandlers in der ready Methode.

from django.apps import AppConfig 
from django.db.models.signals import post_migrate 

def my_callback(sender, **kwargs): 
    # Your specific logic here 
    pass 

class MyAppConfig(AppConfig): 
    ... 

    def ready(self): 
     post_migrate.connect(my_callback, sender=self) 

ähnlich der Sender für post_sync_db Signal (man beachte das Signal veraltet ist) ist das Modul, um die Modelle enthält, die installiert wurden.

+0

Sir, Vielen Dank für Ihre Antwort, es hat perfekt funktioniert und verzeihen Sie mir meine Unwissenheit, da ich glaubte, ich könnte das post_migrate wie die anderen Signale verwenden. – RA123

+1

Hallo @Alasdair, Ich versuche, das gleiche Problem zu archivieren, aber mein benutzerdefiniertes Signal wird nicht ausgelöst. Jeder Vorschlag ist willkommen. Danke im Voraus. – slackmart

+0

@sgmart Bitte stellen Sie eine neue Frage, anstatt einen Kommentar zu einer alten Frage hinzuzufügen. – Alasdair

Verwandte Themen