Сигналы, зарегистрированные более одного раза в тестовом сервере django1.1 - PullRequest
1 голос
/ 19 июля 2009

Я определил функцию обработчика сигнала в моем файле models.py. В нижней части этого файла я использую signals.post_save.connect(myhandler, sender=myclass), как рекомендовано в документации на http://docs.djangoproject.com/en/dev/topics/signals/.

Однако, когда я запускаю тестовый сервер, простая отладка операторов печати показывает, что файл models.py импортируется дважды и (насколько я могу судить) это приводит к тому, что мой обработчик сигналов регистрируется дважды. Это означает, что каждое действие обрабатывается дважды, что, очевидно, не является предполагаемым поведением.

Первый импорт, по-видимому, происходит на этапе проверки модели, а второй происходит правильно, когда сама модель необходима во время первого запроса, обрабатываемого сервером.

Должен ли я регистрировать свои обработчики сигналов в другом месте? Это ошибка в тестовом сервере 1.1? Я что-то упустил?

1 Ответ

4 голосов
/ 19 июля 2009

Подпись для метода connect:

def connect(self, receiver, sender=None, weak=True, dispatch_uid=None)

где параметр dispatch_uid - это идентификатор, используемый для уникальной идентификации конкретного экземпляра получателя. Обычно это строка, хотя может быть что угодно. Если получатели имеют атрибут dispatch_uid, получатель не будет добавлен, если другой получатель уже существует с этим dispatch_uid.

Таким образом, вы можете указать dispatch_uid в своем вызове connect, чтобы посмотреть, устраняет ли это проблему.

...