Django 如何在侦听器是类的方法的情况下使用post_save
当侦听器是类的方法时,我可以使用post_save吗 我想要的是:Django 如何在侦听器是类的方法的情况下使用post_save,django,signals,Django,Signals,当侦听器是类的方法时,我可以使用post_save吗 我想要的是: class UpdCatalog(models.Model): file = models.FileField(upload_to="catalog/") class SomeClass: def codeType(text): row_code = text[0], text[1] return row_code, row_type def main(sender,
class UpdCatalog(models.Model):
file = models.FileField(upload_to="catalog/")
class SomeClass:
def codeType(text):
row_code = text[0], text[1]
return row_code, row_type
def main(sender, instance, created, **kwargs):
text = ["q", "w", "e". "r"]
row_code, row_type = codeType(text)
signals.post_save.connect(SomeClass.main, sender=UpdCatalog)
当我尝试运行此代码时,不会调用main
。没有错误
当侦听器不在类中时,一切正常。您需要研究函数和实例方法之间的差异。在您的例子中,您可以使用
staticmethod
decorator
class SomeClass:
...
@staticmethod
def main(sender, instance, created, **kwargs):
text = ["q", "w", "e". "r"]
row_code, row_type = codeType(text)
您需要研究函数和实例方法之间的区别。在您的例子中,您可以使用
staticmethod
decorator
class SomeClass:
...
@staticmethod
def main(sender, instance, created, **kwargs):
text = ["q", "w", "e". "r"]
row_code, row_type = codeType(text)
现在,当“main”调用“codeType”时,我有:“NameError:全局名称'codeType'未定义”只需将
@staticmethod
装饰器添加到codeType,并通过SomeClass.codeType
调用。因此,我需要将@staticmethod
添加到SomeClass
中的所有(其他)函数中?也许我可以调用post\u save
,而不用@staticmethod
?@kvi,你可以。不要在这里使用类。现在,当“main”调用“codeType”时,我有:“NameError:全局名称'codeType'未定义”只需将@staticmethod
装饰器添加到codeType,并通过SomeClass.codeType
调用。因此,我需要将@staticmethod
添加到所有(其他)中SomeClass
中的函数?也许我可以调用post\u save
,而不用@staticmethod
?@kvi,你可以。只是不要在这里使用类。顺便说一句,你为什么需要在这里使用类?@DrTyrsa我稍后会添加更多函数。我不能回答为什么:)也许我想以后把这个类移到一个单独的文件中,你可以把所有的函数移到一个单独的模块中。您不需要类来完成此操作。@DrTyrsa我理解,谢谢。@kvi欢迎使用堆栈溢出。添加一些内联代码时,请使用反勾“`”进行格式化。请参阅以获取更多信息。顺便说一句,您为什么需要在此处创建类?@DrTyrsa我稍后将添加更多函数。我不能回答为什么:)也许我想以后把这个类移到一个单独的文件中,你可以把所有的函数移到一个单独的模块中。您不需要类来完成此操作。@DrTyrsa我理解,谢谢。@kvi欢迎使用堆栈溢出。添加一些内联代码时,请使用反勾“`”进行格式化。有关更多信息,请参阅。