Django pre_save信号

时间:2011-11-05 18:18:15

标签: django django-signals

我需要能够在保存模型数据之前更改模型数据,因此我认为使用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方法,但我宁愿不这样做。

1 个答案:

答案 0 :(得分:4)

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

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

请参阅the documentation