Django中AppSettings对象无STORE_TOKENS属性的报错求助
解决方案
1. 确保app_settings是AppSettings类的实例
你需要在models.py中先实例化AppSettings类,而非直接使用类本身:
# models.py from .app_settings import AppSettings # 替换为你实际使用的前缀,比如你的设置前缀是'ALLAUTH_'就写这个 app_settings = AppSettings('ALLAUTH_')
如果之前你只是把类赋值给app_settings(比如app_settings = AppSettings),访问app_settings.STORE_TOKENS必然报错——因为@property装饰的是实例属性,类本身并不具备这个属性。
2. 检查导入是否正确
确认models.py中导入的AppSettings确实来自你定义的app_settings.py模块,避免误导入第三方库或其他模块的同名类。可以通过以下代码验证:
print(app_settings.__class__.__module__)
输出应为你的项目中app_settings.py所在的模块路径,比如myapp.app_settings。
3. 验证@property装饰器是否生效
在实例化app_settings后,打印实例的属性列表来确认STORE_TOKENS是否存在:
print(dir(app_settings))
如果输出包含STORE_TOKENS,说明属性存在,此时需要检查_setting方法内的逻辑是否有问题;如果不包含,则要确认类定义是否被正确加载。
4. 排查循环导入问题
如果models.py和app_settings.py存在循环导入(比如前者导入AppSettings,后者又导入models中的内容),会导致类定义未完全加载,无法识别@property属性。此时可以调整导入结构:
# 在models.py需要使用app_settings的方法内部导入 def some_method(self): from .app_settings import AppSettings app_settings = AppSettings('ALLAUTH_') if app_settings.STORE_TOKENS and self.token and self.token.app.pk: # 你的业务逻辑
延迟导入可以避免循环依赖导致的类加载异常。
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

