同一文件中的Python和Django模型没有看到对方
发布时间:2020-12-20 13:40:44 所属栏目:Python 来源:网络整理
导读:class B(models.Model): whatever = models.TextField(blank=True) @staticmethod def are_we_ok(): return Falseclass A(models.Model) text = models.TextField(blank=True) @staticmethod def is_everything_ok(): if not B.are_we_ok(): raise B.DoesNot
class B(models.Model): whatever = models.TextField(blank=True) @staticmethod def are_we_ok(): return False class A(models.Model) text = models.TextField(blank=True) @staticmethod def is_everything_ok(): if not B.are_we_ok(): raise B.DoesNotExist A.is_everything_ok() 为什么我收到错误: File "asdf/models.py",line x,in is_everything_ok if not B.are_we_ok(): AttributeError: 'NoneType' object has no attribute 'are_we_ok' 但是,如果我这样做: class A(models.Model) text = models.TextField(blank=True) @staticmethod def is_everything_ok(): from asdf.models import B if not B.are_we_ok(): raise B.DoesNotExist 有用.这对我没有任何意义.这是巨大的Django应用程序的一部分.任何想法可能会导致什么样的情况? (例如,循环依赖可能吗?) 更新: 我忘了提到这个代码已经运行了四年没有任何麻烦.最近一些不相关的编辑引发了这个错误. 解决方法
用@classmethod替换@staticmethod.使用staticmethod时,self或类都不会作为第一个参数传递,这就是您无法调用该方法的原因.
如果切换,则需要将该类添加为函数的第一个参数: class B(models.Model): whatever = models.TextField(blank=True) @classmethod def are_we_ok(cls): return False 有关更多信息,请参阅:What is the difference between @staticmethod and @classmethod in Python?. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |