Django 如何在侦听器是类的方法的情况下使用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,

当侦听器是类的方法时,我可以使用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, 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欢迎使用堆栈溢出。添加一些内联代码时,请使用反勾“`”进行格式化。有关更多信息,请参阅。