执行意外
问题描述:
模型的Django pre_delete模型的方法:执行意外
我有三个型号:
包,商品和交易。
包型号:
class Packet(models.Model):
"""
Packet model
"""
#Some Fields
产品型号:
class Item(models.Model):
"""
Item model class
"""
packet = models.ForeignKey(Packet,
verbose_name='related packet',
)
#Some Fields
@receiver(pre_delete)
def copy_item_details(sender, instance, **kwargs):
"""
:param sender:
:param instance:
:param kwargs:
:return:
"""
#Some code
交易模式:
class Transaction(models.Model):
"""
Transaction Model
"""
packet = models.ForeignKey(Packet,
verbose_name='related packet',
)
#Some Fields
我的问题是,如果我尝试删除事务类的实例。 Item模型类中定义的方法(copy_item_details)正在执行。为什么这样? copy_item_details
只应在Item模型类的实例被删除时执行。
答
在@receiver
定义指定信号的发送方:
@receiver(pre_delete, sender=Item)
def copy_item_details(sender, instance, **kwargs):
"""
:param sender:
:param instance:
:param kwargs:
:return:
"""
#Some code
注: 信号应放置在signals.py不是在模型。 根据Django文档:
“严格地说,信号处理和注册码可以住 任何你喜欢的,但建议避免 应用程序的根模块和模型模块,以尽量减少进口的 副作用代码
实际上,信号处理程序通常是在它们相关的应用程序的信号子模块中定义的。
这是您的link。
sender = Transaction or sender = Item ???? – 2014-11-21 10:42:13
因为我想为Item模型执行此方法。你能告诉我为什么会发生这种情况.... – 2014-11-21 10:42:51
@ user2217267检查更新到我的答案。 – wolendranh 2014-11-21 10:46:45