2013-03-09 1 views
2
내가 처음 수퍼 유저가 생성 될 때 전송 된 특정 신호가 있는지 알고 싶어

생성됩니다. syncdb을 실행할 때 슈퍼 유저를 생성하라는 메시지가 표시됩니다. 그 시점에서 어떤 신호가 보내 졌는지 알기를 원합니다. 신호를 사용하여 초기화를 할 수 있습니다. 아니면 첫 번째 슈퍼 유저가 생성되었을 때만 코드를 실행할 수있는 방법이 있습니다. 그 코드가 처음에는 단 한 번만 실행되기를 바랍니다. 도움이 pls. 나는이 질문이 의미가 있기를 바란다 ... 늦게 나는 나의 질문이 의미가 없다는 비판을 받고있다. 난 당신이뿐만 아니라 post_syncdb 신호에 끼어 이후 여분의 코드를 실행할 수 있습니다,이 하나가초기화는

+0

문제의 문제점은 왜 우리가 원하는 것을해야하는지 알려주지 않는다는 것입니다. 어쩌면 당신은 또 다른 문제가 있고 이것을하지 않고 쉽게 고칠 수 있습니다 ... 나는 정말로 당신이 그 신호를 다루어야하는 이유를 정말로 알고 싶습니다 .... – marianobianchi

답변

1
def superuser_creation(sender, instance, created, **kwargs): 
    user = kwargs['instance'] 
    if user.is_superuser: 
     //do something here 

post_save.connect(superuser_creation, sender=User) 
+0

문제는 : syncdb가 아직 끝나지 않았기 때문입니다. 다른 테이블을 포함하는 여기 뭔가가 작동하지 않을 위험이 있습니다. 다른 솔루션은 더욱 견고 해 보입니다. – cyberjoac

1

수퍼 유저의 작성이 post_syncdb signal에 의해 호출하지 바랍니다.

다음 코드를 앱 중 하나의 management/__init__.py에 넣고 해당 앱의 경로가 django.contrib.auth 인 지 확인하십시오 (settings.INSTALLED_APPS).

from django.contrib.auth import models as auth_app 
from django.db.models import signals 

def operate_upon_first_superuser_after_syncdb(app, created_models, verbosity, db, **kwargs): 
    if auth_app.User in created_models and kwargs.get('interactive', True): 
     if auth_app.User.objects.filter(is_superuser=True).exists(): 
      # ... extra code here 

signals.post_syncdb.connect(operate_upon_first_superuser_after_syncdb, 
    sender=auth_app, dispatch_uid='operate_upon_first_superuser_after_syncdb')