Django同一Model内部调用自定义方法报AttributeError的问题及解决
Django同模型类内部调用自定义方法报错问题解决
报错场景
在Django的models.py文件中,尝试在同一个Model类的方法内调用该类的另一个自定义方法,运行时抛出如下错误:AttributeError: module 'my_website.models' has no attribute 'my_model_method'
错误复现代码
class SaleCode(models.Model): # 其他字段与方法省略 # 需要被调用的自定义方法 def generate_token(self, apply=True, length=5): # 业务逻辑省略 return { "token": token, "self-applyed": apply } # 重写的save()方法 def save(self, *args, **kwargs): if not self.pk: # self.code为模型字段 self.code = self.generate_token()["token"] # 报错行 super(SaleCode, self).save(*args, **kwargs)
已尝试的无效解决方案
- 参考网络方案在
generate_token()声明上方添加@classmethod(也测试过@staticmethod)装饰器,再通过SaleCode.generate_token()的方式调用,依然报错,修改后代码如下:
@classmethod def generate_token(self, apply=True, length=5): # 业务逻辑省略 self.code = SaleCode.generate_token()["token"] # 仍报错
- 将
generate_token()方法写在模型类外部作为独立函数调用,可以正常运行,但该写法不符合面向对象的代码规范。
最终解决方案
直接重启Django开发服务器即可解决该问题,重启命令为:python manage.py runserver
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

