我正在努力将烧瓶管理器添加到预先存在的烧瓶锅炉板项目中。我已经能够在https://github.com/kc1/flask-base(SCREENSHOT)上完成基本项目。我现在需要添加模型视图以添加基本的CRUD功能。为此,我将代码更改为:
adm = Admin(app,name='flaskadmin')
from app.models import User
adm.add_view(ModelView(User, db.session))
你可以看到它有效。但是如果我在app / init顶部导入其他导入的User模型,我得到:
Traceback (most recent call last):
File "...flask-base/manage.py", line 10, in <module>
from app import create_app, db
File "E:\ENVS\r3\flask-base\app\__init__.py", line 17, in <module>
from app.models import User
File "E:\ENVS\r3\flask-base\app\models\__init__.py", line 6, in <module>
from .user import * # noqa
File "E:\ENVS\r3\flask-base\app\models\user.py", line 7, in <module>
from .. import db, login_manager
ImportError: cannot import name 'db'
为什么?
答案 0 :(得分:3)
User
是一个Flask-SQLAlchemy
模型,它使用SQLalchemy的API包装模型。它从db
对象继承了它的所有模型,我假设你在create_app
方法中实例化或注册。
所以,你应该有这样的东西
db = SQLAlchemy()
def create_app(config):
app = Flask(__name__)
db.init_app(app)
adm = Admin(app,name='flaskadmin')
from app.models import User
adm.add_view(ModelView(User, db.session))
return app
每当您从User
导入user.py
时,您基本上都会导入db.Model
,这需要db
存在且实际包含数据。请注意Flask和Python中的circular imports。
错误追溯
中明确说明了您收到的错误 File "E:\ENVS\r3\flask-base\app\models\user.py", line 7, in <module>
from .. import db, login_manager
ImportError: cannot import name 'db'
这是user.py
,db
中有../__init__.py
的导入,但在User
定义db
之前导致db
导入}}。
function multiplier() {
return { result1: 25 * 20, result2: 25 * 1 }
}
对象模拟declarative
approach from SQLAlchemy,其中对象包含有关从其继承的每个其他类的数据。