【发布时间】:2020-06-25 18:19:42
【问题描述】:
我正在使用计算机网格仪表板并多次遇到以下错误:
AttributeError: 'NoneType' object has no attribute 'filter_by'
这发生在我稍微改变我的模型之后。 原来的模型是:
class Worker (UserMixin, Base):
__tablename__ = 'worker'
...
当它完全像这样时,我得到以下信息:
[2020-03-13 15:10:11,389] ERROR in app: Exception on /admin/ [GET]
Traceback (most recent call last):
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib64/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib64/python3.6/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1947, in full_dispatch_request
rv = self.preprocess_request()
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 2241, in preprocess_request
rv = func()
File "/home/rancher/.local/lib/python3.6/site-packages/flask_principal.py", line 477, in _on_before_request
identity = loader()
File "/home/rancher/.local/lib/python3.6/site-packages/flask_security/core.py", line 245, in _identity_loader
if not isinstance(current_user._get_current_object(), AnonymousUserMixin):
File "/home/rancher/.local/lib/python3.6/site-packages/werkzeug/local.py", line 307, in _get_current_object
return self.__local()
File "/usr/local/lib64/python3.6/site-packages/flask_login/utils.py", line 26, in <lambda>
current_user = LocalProxy(lambda: _get_user())
File "/usr/local/lib64/python3.6/site-packages/flask_login/utils.py", line 335, in _get_user
current_app.login_manager._load_user()
File "/usr/local/lib64/python3.6/site-packages/flask_login/login_manager.py", line 359, in _load_user
return self.reload_user()
File "/usr/local/lib64/python3.6/site-packages/flask_login/login_manager.py", line 321, in reload_user
user = self.user_callback(user_id)
File "/home/rancher/.local/lib/python3.6/site-packages/flask_security/core.py", line 221, in _user_loader
return _security.datastore.find_user(id=user_id)
File "/home/rancher/.local/lib/python3.6/site-packages/flask_security/datastore.py", line 254, in find_user
return self.user_model.query.filter_by(**kwargs).first()
AttributeError: type object 'Worker' has no attribute 'query'
在网上找这个错误,我得到的答案是它也应该继承自db.Model,是db = SQLAlchemy(app)。但是我会创建一个“导入循环”,一旦我需要将Worker 从模型导入应用程序,并将db 从应用程序导入模型。这显然会崩溃。
我认为可行的解决方法是导入 Model 对象,例如
from flask_sqlalchemy import Model
并让我的模型继承它
class Worker (Model, UserMixin, Base):
...
但最后我得到以下信息:
[2020-03-13 15:06:45,878] ERROR in app: Exception on /admin/ [GET]
Traceback (most recent call last):
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib64/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib64/python3.6/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1947, in full_dispatch_request
rv = self.preprocess_request()
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 2241, in preprocess_request
rv = func()
File "/home/rancher/.local/lib/python3.6/site-packages/flask_principal.py", line 477, in _on_before_request
identity = loader()
File "/home/rancher/.local/lib/python3.6/site-packages/flask_security/core.py", line 245, in _identity_loader
if not isinstance(current_user._get_current_object(), AnonymousUserMixin):
File "/home/rancher/.local/lib/python3.6/site-packages/werkzeug/local.py", line 307, in _get_current_object
return self.__local()
File "/usr/local/lib64/python3.6/site-packages/flask_login/utils.py", line 26, in <lambda>
current_user = LocalProxy(lambda: _get_user())
File "/usr/local/lib64/python3.6/site-packages/flask_login/utils.py", line 335, in _get_user
current_app.login_manager._load_user()
File "/usr/local/lib64/python3.6/site-packages/flask_login/login_manager.py", line 359, in _load_user
return self.reload_user()
File "/usr/local/lib64/python3.6/site-packages/flask_login/login_manager.py", line 321, in reload_user
user = self.user_callback(user_id)
File "/home/rancher/.local/lib/python3.6/site-packages/flask_security/core.py", line 221, in _user_loader
return _security.datastore.find_user(id=user_id)
File "/home/rancher/.local/lib/python3.6/site-packages/flask_security/datastore.py", line 254, in find_user
return self.user_model.query.filter_by(**kwargs).first()
AttributeError: 'NoneType' object has no attribute 'filter_by'
我怎样才能做到这一点?我只是对此感到愤怒,无法再集中注意力
【问题讨论】:
标签: python flask flask-sqlalchemy flask-login flask-security