2013-03-09 4 views
2

Я хочу знать, есть ли какие-либо конкретные сигналы, отправленные при создании первого суперпользователя. Я говорю о том, когда я запускаю syncdb, и мне предлагается создать суперпользователя. В этот момент я хочу знать, посылаются ли какие-либо сигналы, чтобы я мог использовать сигнал для инициализации. Или есть способ, которым я могу иметь кусок кода, который запускается только в тот момент, когда создается первый суперпользователь. Я хочу, чтобы этот фрагмент кода запускался только один раз в начале. помощь pls. Надеюсь, этот вопрос имеет смысл ... в последнее время я кричу, что мои вопросы не имеют смысла. Я надеюсь, что это один делаетИнициализация после создания первого суперпользователя

+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, вы можете подключить к 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') 
Смежные вопросы