[英]Django 1.2: How to connect pre_save signal to class method
我试图在我的django 1.2项目中的某些类中定义“before_save”方法。 我在将信号连接到models.py中的类方法时遇到问题。
class MyClass(models.Model):
....
def before_save(self, sender, instance, *args, **kwargs):
self.test_field = "It worked"
我已经尝试将pre_save.connect(before_save,sender ='self')放在'MyClass'本身,但没有任何反应。
我也尝试将它放在models.py文件的底部:
pre_save.connect(MyClass.before_save, sender=MyClass)
我在这里读到了将信号连接到类方法,但无法弄清楚代码。
谁知道我做错了什么?
使用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)
还有一个很棒的装饰器可以自动处理信号连接: http : //djangosnippets.org/snippets/2124/
我知道这个问题已经过时了,但我今天早些时候正在寻找答案,所以为什么不呢。 从您的代码中可以看出,您实际上想要使用实例方法(来自self
和字段赋值)。 DataGreed解决了如何将它用于类方法,并且使用带有实例方法的信号非常相似。
class MyClass(models.Model)
test_field = models.Charfield(max_length=100)
def __init__(self, *args, **kwargs):
super(MyClass, self).__init__(*args, **kwargs)
pre_save.connect(self.before_save, sender=MyClass)
def before_save(self, sender, instance, *args, **kwargs):
self.test_field = "It worked"
我不确定这是不是一个好主意,但是当我从B类保存之前需要一个在A类对象上调用的实例方法时,它很有用。
您应该只使用一个函数,而不是在MyClass上使用方法。 就像是:
def before_save(sender, instance, *args, **kwargs):
instance.test_field = "It worked"
pre_save.connect(before_save, sender=MyClass)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.