Post_save получил дважды за одно сохранение даже при использовании dispatch_uid - PullRequest
5 голосов
/ 10 января 2012

У меня есть модели в отдельных файлах:

models
\ 
 |__init__.py
 |event.py
 |a_thing.py
 |...

В __init__.py я импортирую каждую модель и после этого устанавливаю обработку сигнала.

Для модели Event мне нужна обработка post_save.

Это усеченная версия __init__.py:

from django.db.models.signals import post_save
from django.dispatch import receiver

from core.models.event import Event

# Event
@receiver(post_save, sender = Event)
def event_post_save(sender, dispatch_uid = 'nope', **kwargs):
    print kwargs.get('created')
    print '------'

Всякий раз, когда я сохраняю Event через консоль, сообщение в post_save печатается один раз, но всякий раз, когда я использую интерфейс администратора, оно печатается дважды. Это может быть связано с тем, что я импортирую модели и в admin.py.

Есть ли обходной путь для этого, чтобы я мог сохранять объекты событий из интерфейса администратора без двойного запуска post_save?

Ответы [ 2 ]

4 голосов
/ 11 января 2012

Это, вероятно, из-за глупости импорта Django / Python. Вам нужно dispatch_uid, как у вас, но я думаю, что это должен быть аргумент декоратору, а не сам обработчик.

0 голосов
/ 10 января 2012

Мне удалось это исправить, переместив обработку сигналов в представления «__init__.py вместо моделей» __init__.py

...