Django pre_delete模型方法意外执行



>Models:

我有三个模型:

数据包、项目和事务。

数据包型号:

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

我的问题是如果我尝试删除事务类的实例。正在执行项模型类中定义的方法 (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文档:

"严格来说,信号处理和注册码可以活 任何你喜欢的地方,尽管建议避免 应用程序的根模块及其模型模块最小化 导入代码的副作用。

在实践中,信号处理程序通常在信号中定义 它们相关的应用程序的子模块。

这是给您的链接。

最新更新