2011-11-05 101 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

對不起,這應該是'發件人'。 –