在我看来,第二个问题是您使用的是无边界方法
send_mail。如果您真的想
send_mail在班级内打电话,也许
@classmethod或
@staticmethod会帮助您:
class Revision(models.Model): # Model junk... @classmethod def send_email(cls, sender, instance, created, **kwargs): if created: print "DO STUFF"signals.post_save.connect(Revision.send_email, sender=Revision)
要么
class Revision(models.Model): # Model junk... @staticmethod def send_email(sender, instance, created, **kwargs): if created: print "DO STUFF"signals.post_save.connect(Revision.send_email, sender=Revision)
另外,也可以不使用这些装饰器,而通过有限实例方法:
class Revision(models.Model):# Model junk... def send_email(self, sender, instance, created, **kwargs): if created: print "DO STUFF"signals.post_save.connect(Revision().send_email, sender=Revision)
参考文献:
从Django源代码中:
def connect(self, receiver, sender=None, weak=True, dispatch_uid=None):"""Connect receiver to sender for signal.Arguments: receiver A function or an instance method which is to receive signals. Receivers must be hashable objects. If weak is True, then receiver must be weak-referencable (more precisely saferef.safeRef() must be able to create a reference to the receiver). Receivers must be able to accept keyword arguments. If receivers have a dispatch_uid attribute, the receiver will not be added if another receiver already exists with that dispatch_uid.
@classmethod
和之间的区别@staticmethod
:Python中的@staticmethod和@classmethod有什么区别?



