模特:
我有三种模式:
数据包,项目和交易。
包模型:
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
我的问题是,如果我尝试删除Transaction类的实例。 Item模型类中定义的方法(copy_item_details)正在执行。为什么会这样???? copy_item_details
只应在删除Item模型类的实例时执行。
答案 0 :(得分:1)
在@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。