2013-03-09 36 views
2

我想知道在创建第一个超级用户时是否发送了任何特定信号。我在谈论我什么时候运行syncdb,并被要求创建一个超级用户。此时我想知道是否发送了任何信号,以便我可以使用该信号进行一些初始化。或者有什么办法可以让代码只在创建第一个超级用户的那一刻运行。我希望这段代码在开始时只运行一次。帮助请。我希望这个问题有道理......最近我一直在批评我的问题没有道理。我希望这个人做创建第一个超级用户后初始化

+0

我认为你的问题存在的问题是你没有告诉我们为什么你需要做你想做的。也许你有另一个问题,可以很容易地修复,而无需这样做......我真的很想知道为什么你需要处理这个信号.... – marianobianchi 2013-03-09 22:46:03

回答

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 2015-01-13 19:41:44

1

超级用户的创建是通过调用post_syncdb signal,你可以钩到post_syncdb信号以及事后运行额外的代码。

将下面的代码到你的应用程序之一的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') 
相关问题