2011-11-05 56 views
1

我需要能够改变我的模型数据,将它保存过,所以我认为用pre_save处理程序是最好的选择:Django的pre_save信号

@receiver(pre_save, weak = False) 
def pre_category_save(sender, **kwargs): 
    if kwargs['instance'].tags is None: 
     kwargs['instance'].tags = kwargs['instance'].__unicode__().replace(' -> ', ', ') 

在kwargs实例关键我希望找到实际模型实例我正在保存,但是我得到了一个LogEntry类的对象 - 这就是为什么我的函数失败返回此错误的原因:'LogEntry'对象没有属性'标记'。所以 - 我该如何解决这个问题?检查实例是否具有属性标记不是解决方案,因为我总是只获取logentry对象。我最终可以重载Model.save方法,但我宁愿不这样做。

回答

4

您还没有指定此信号正在接收的型号类,因此它自身连接到所有型号保存 - 包括LogEntry。相反,请这样做:

@receiver(pre_save, sender=MyModel, weak=False) 
... 

请参阅the documentation

+0

非常感谢! – marek

+0

对不起,这应该是'发件人'。 –