Django 1.2:如何将pre_save信号连接到类方法

dmo*_*s18 7 python django signals django-1.2 python-2.7

我试图在我的django 1.2项目中的某些类中定义"before_save"方法.我在将信号连接到models.py中的类方法时遇到问题.

class MyClass(models.Model):
    ....
    def before_save(self, sender, instance, *args, **kwargs):
        self.test_field = "It worked"
Run Code Online (Sandbox Code Playgroud)

我已经尝试将pre_save.connect(before_save,sender ='self')放在'MyClass'本身,但没有任何反应.

我也尝试将它放在models.py文件的底部:

pre_save.connect(MyClass.before_save, sender=MyClass)
Run Code Online (Sandbox Code Playgroud)

在这里读到了将信号连接到类方法,但无法弄清楚代码.

谁知道我做错了什么?

Dat*_*eed 8

使用classmethod的一个工作示例:

class MyClass(models.Model):
    #....
    @classmethod
    def before_save(cls, sender, instance, *args, **kwargs):
        instance.test_field = "It worked"

pre_save.connect(MyClass.before_save, sender=MyClass)
Run Code Online (Sandbox Code Playgroud)

还有一个很棒的装饰器可以自动处理信号连接:http://djangosnippets.org/snippets/2124/


cbe*_*ner -1

您应该只使用函数,而不是在 MyClass 上使用方法。就像是:

def before_save(sender, instance, *args, **kwargs):
    instance.test_field = "It worked"

pre_save.connect(before_save, sender=MyClass)
Run Code Online (Sandbox Code Playgroud)

  • 请不要推荐这个。使用类方法的原因是它使代码更加清晰和组织得更好,特别是当该方法仅与类及其数据相关时。 (3认同)