当前位置: 首页 > 面试题库 >

尝试使用Flask-Admin设置模型视图会导致ImportError

祁英哲
2023-03-14
问题内容

我试图将用户模型视图添加到Flask-Admin。但是,我得到了ImportError: cannot import name db。为什么会发生这种情况,我该如何解决?

app/__init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import flask_admin as admin
from app.models import User

db = SQLAlchemy()
admin = admin.Admin(name="Admin Panel")

def create_app(config_name):
    app = Flask(__name__)
    db.init_app(app)
    admin.init_app(app)
    admin.add_view(ModelView(User, db.session))
    return app

app/models.py

from . import db, login_manager

class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)

当添加时admin.add_view(ModelView(User, db.session)),我也必须添加from app.models import User。添加以下行后出现此错误:

Traceback (most recent call last):
      File "manage.py", line 3, in <module>
        from app.models import User, Role
      File "/home/qadim/PycharmProjects/esouq/app/__init__.py", line 1, in <module>
        from app.models import User
      File "/home/qadim/PycharmProjects/esouq/app/models.py", line 9, in <module>
        from . import db, login_manager
    ImportError: cannot import name db

问题答案:

您的代码行from app.models import User__init__.py。问题是,app.modelsfrom . import db。这是一个循环导入:__init__尝试导入User,尝试导入db,直到__init__尝试导入才定义User。要解决此问题,请将本地应用程序导入移动到所有全局扩展名的定义下方。

目前,您的代码如下所示:

from flask_sqlalchemy import SQLAlchemy
from app.models import User

db = SQLAlchemy()

您需要将其更改为:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

from app.models import User


 类似资料:
  • 帮助将cookie设置为HttpClient 创建了一个登录到外部web服务的程序。但是,要从HTTP GET获取重要信息,我无法传入cookie(从登录生成)。 app.java(使用ClientHelper的类): 当我运行应用程序时,我可以登录(我看到生成的JSON),但是getProfile()方法返回一个空的JSON对象: 在命令行中,我试图使用curl来模拟以下情况:

  • 我从单元测试开始。我对一个类做了更改,在这个类中我不注入SessionContext,这样我就可以在需要时进行查找。 现在,在我的测试中,我想注入它,这样我就可以模拟查找方法: 我觉得很奇怪,因为我拥有所需的所有依赖项(这段代码在真实的应用程序中工作)。 如何使用mockito模拟和注入SessionContext?(我无法改变嘲讽框架)。

  • 在尝试遍历ShapeContainer的内部内容时,我希望通过检查的父项来区分和不是的子项: 无论是否是的子级,这对于每种情况都是相同的。 测试1:检查ShapeContainer是否为XSSFShapeGroup的实例。 测试2:访问子节点后查找父标记。 这清楚地表明父级确实存在,并且还允许我们在进程中检查父级。 我还没有检查其他类型的,如或。但是,由于它们都继承了同一个类,即,我想结果不会有太

  • 问题内容: 有一次,我改变DEBUG = False,我的网站将产生500(使用WSGI和manage.py runserver命令),并且在Apache的错误日志中没有错误信息,当我改变它通常会运行debug到True。 我正在使用Django 1.5和Python 2.7.3,这是Apache访问日志,并且在apache错误日志中没有任何日志 这是我的设置文件: 问题答案: Django 1.

  • 我有一个立方体,我只在x轴上的3个点(浮动位置)之间移动它。所以立方体将从0.00开始,我按下右键,它在x轴上向右移动到2.0f。然后我按下左键,它会回到0.0f。然后我再次按下左键,它会移动到-2.0f。按下右键应该会将其返回到0.0f,但会超出0。误差的大小取决于我移动的速度。 如果我从左键开始,结果也是一样的。 帧时间是

  • 所以在用kotlin类做了大量的试验和错误之后,我发现同样的代码在java中是可测试的,但在kotlin中是不可测试的。 这会导致:org . mock ITO . exceptions . mis using . missingmethodinvocationexception:when()需要一个必须是“模拟上的方法调用”的参数。比如:when(mock.getArticles())。然后返回