Используя Django 1.2, я запускаю приложение django-registration и создаю объект профиля пользователя после регистрации, создавая пользователя - используя код, полученный из некоторых других Вопросов:
# models.py
def create_player_profile(sender, instance, created, **kwargs):
signals.post_save.disconnect(create_player_profile, sender = User) # added.
if created:
print "creating profile."
profile, created = PlayerProfile.objects.get_or_create(user = instance)
print "profile %s created = %s" % (str(profile), str(created))
else:
print "problems creating profile."
signals.post_save.connect(create_player_profile, sender = User)
И все работает нормально :) Единственная проблема в том, что я получаю два набора вывода, указывающих, что код выполняется дважды . Я подозреваю, что по какой-то причине сигнал отправляется дважды.
Первая мысль: файл получает импортированный дважды, устанавливая два одинаковых сигнала. Что заставляет меня задуматься, может быть, django-registration делает что-то автоматически? Или что-то еще, что я еще не понимаю о Джанго. :)
Так почему код выполняется дважды? Отправляются ли два сигнала, и если да, то почему?
Обновление Только что заметил Этот ответ объяснил, как избежать дублирования сигналов. И это сработало, несколько :) Мой вывод пошел от:
создание профиля.
создание профиля.
проблемы при создании профиля
проблемы при создании профиля
до:
создание профиля.
проблемы при создании профиля
Я не знаю, означает ли это, что мой код изначально выполнялся четыре раза ? И выпал только два раза? Я весьма озадачен. :)
Обновление 2 - добавлена строка signal.disconnect . Я полагал, что удаление сигнала предотвратит выполнение функции дважды. Увы, я был неправ - create-player-profile это все еще , работающий дважды ... Я понятия не имею, почему, если сигнал был немедленно удален.