即使使用dispatch_uid,Post_save也会收到两次一次保存

时间:2012-01-10 14:07:04

标签: django django-admin django-signals

我将模型放在单个文件中:

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两次触发的情况下从管理界面保存Event对象?

2 个答案:

答案 0 :(得分:4)

它可能来自Django / Python导入愚蠢。你需要dispatch_uid,但我认为它需要是装饰器的参数,而不是处理程序本身。

答案 1 :(得分:0)

我设法解决了问题,我将信号处理移至视图“__init__.py而不是模型”__init__.py