概述
from django.db import models from django.db.models.signals import pre_save # Create your models here. class Parent(models.Model): name = models.CharField(max_length=64) def save(self,**kwargs): print "Parent save..." super(Parent,self).save(**kwargs) def pre_save_parent(**kwargs): print "pre_save_parent" pre_save.connect(pre_save_parent,Parent) class Child(Parent): color = models.CharField(max_length=64) def save(self,**kwargs): print "Child save..." super(Child,self).save(**kwargs) def pre_save_child(**kwargs): print "pre_save_child" pre_save.connect(pre_save_child,Child)
创建Child时,pre_save_parent不会触发:
child = models.Child.objects.create(color="red")
这是预期的行为吗?
你的解决方法看起来很好.以下是分别于benbest86和alexr在机票上提出的另外两项建议.
>听取子类信号,并在那里发送父信号.
def call_parent_pre_save(sender,instance,created,**kwargs): pre_save.send(sender=Parent,instance=Parent.objects.get(id=instance.id),created=created,**kwargs) pre_save.connect(call_parent_pre_save,sender=Child)
>连接信号时不要指定发送方,然后检查父类的子类.
def pre_save_parent(sender,**kwargs): if not @R_502_948@(instance,Parent): return #do normal signal stuff here print "pre_save_parent" pre_save.connect(pre_save_parent)
总结
以上是编程之家为你收集整理的python – Django:基本模型信号处理程序不会触发全部内容,希望文章能够帮你解决python – Django:基本模型信号处理程序不会触发所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧