Попытка настроить представление модели с помощью Flask-Admin вызывает ImportError

Я пытаюсь добавить представление модели пользователя в 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

person qasimalbaqali    schedule 28.05.2015    source источник


Ответы (1)


В вашем коде есть строка from app.models import User в __init__.py. Проблема в том, что у app.models есть from . 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
person davidism    schedule 28.05.2015