如何解决Flask-Admin:current_user 意外未定义?
我有一个完全可用的 Flask-Admin 应用程序,它使用 Flask-Login。在我的 ModelView 代码的许多地方,我使用了 current_user
,这一直有效。例如,我有
def on_model_change(self,form,model,is_created):
model.last_modified_by = current_user.get_id()
我现在尝试根据访问级别禁用对字段的编辑,在我声明了一些 form_args
之后,我补充说:
if current_user.access_level == 'USER':
form_widget_args = {'salary': {'disabled': True}}
这会引发错误 AttributeError: 'NoneType' object has no attribute 'access_level'
。然而,如果没有此代码,我会直接进入上面显示的 on_model_change
,这成功地设置了 last_modified_by
值。
会发生什么?
解决方法
好的,经过更多的挖掘,我遇到了 this question,它揭示了发生了什么。 form_widget_args
的值在应用初始化时被缓存,并且在实际运行时(即当有 current_user
时)没有被检查。
我将代码更改为:
@property
def form_widget_args(self):
if not has_app_context() or (current_user.access_level == 'USER'):
form_widget_args = {'salary': {'disabled': True}}
return form_widget_args
一切都很好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。