您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – Django:基本模型信号处理程序不会触发

5b51 2022/1/14 8:22:07 python 字数 3019 阅读 525 来源 www.jb51.cc/python

在以下示例代码中: 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(se

概述

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")

这是预期的行为吗?

你的解决方法看起来很好.以下是分别于benbest86alexr在机票上提出的另外两项建议.

>听取子类信号,并在那里发送父信号.

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:基本模型信号处理程序不会触发所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶