2015-08-11 13 views
5

Aşağıdaki kod, auth modelinin tanımlandığı pakete yerleştirilen signal.py dosyasındaki koddur., özel bir kullanıcı modeli ayarlandığında post_migrate ve post_syncdb sinyal alıcısı için gönderici nasıl ayarlanır?

@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') 

belgeleri (https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#referencing-the-user-model) post_save için bu sadece çalışır dokümantasyon örnekte belirtildiği gibi iken

sender=settings.AUTH_USER_MODEL 

olarak ayarlanması gerekir belirtmektedir.

Zaten get_user_model denedim() ve ayrıca doğrudan my_custom_user.models kullanarak.

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') 

Ama belgelere göre bu olmayan özel bir kullanıcı modeli başvurmak için doğru yolu ve adildir - gönderen olarak, gayet güzel çalışıyor gibi modelleri ayarlarken, bir hata döndürür

get_user_model() çirkin bir çözüm.

Birisi lütfen bana bir çözüm konusunda yardımcı olabilir, bu yüzden bu Grupları kullanıcı modelinin ilk geçişiyle ekleyebilirim.

Teşekkür

DÜZENLEME: döndüren) (aşağıdaki hatayı get_user_model kullanarak - bu için AppConfig örneğidir post_migrate yöntemi için sender bir modeli (aksi özel veya) asla

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

Merhaba @ RA123, aynı sorunu arşivlemeye çalışıyorum, ancak özel sinyalim tetiklenmiyor. Herhangi bir öneri açığız. Şimdiden teşekkürler. – slackmart

cevap

7

yüklü olan uygulama.

Dokümanlar, sinyal işleyicinizi ready yöntemine bağlamak için aşağıdaki örneği verir.

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) 

Benzer şekilde, post_sync_db sinyali gönderen (sinyal kaldırıldı edin) yüklenen modelini içeren bir modüldür.

+0

Efendim, Cevabınız için teşekkürler, mükemmel çalıştı ve post_migrate'ı diğer sinyaller gibi kullanabileceğime inandığım için cehaletim için beni affet. – RA123

+1

Merhaba @Alasdair, Aynı sorunu arşivlemeye çalışıyorum, ancak özel sinyalim kovulmuyor. Herhangi bir öneri açığız. Şimdiden teşekkürler. – slackmart

+0

@sgmart eski bir soruya yorum eklemek yerine lütfen yeni bir soru sorun. – Alasdair

İlgili konular