Ошибка отношения Flask-SqlAlchemy «имя <Classname>не определено» с использованием разных файлов Models.py - PullRequest
0 голосов
/ 25 сентября 2019

Это моя структура проекта колбы

app
--main
  --model
    --note.py
    --user.py
    --todaynote.py 
manage.py

, и я импортировал всю модель в manage.py

from app.main import create_app, db
from app.main.model import todaynote
from app.main.model import note
from app.main.model import user 

Инициализирую базу данных mysql с db.create_all() и затем, когда я создал объект Userчтобы проверить БД в REPL, я получил эту ошибку

sqlalchemy.exc.InvalidRequestError: When initializing mapper mapped class User->user, expression 'TodayNote' failed to locate a name ("name 'TodayNote' is not defined"). If this is a class name, consider adding this relationship() to the <class 'app.main.model.user.User'> class after both dependent classes have been defined.

Странный пункт 1. Когда я помещаю User и TodayNote в один и тот же модуль, он не выдает ошибку 2. Обратите внимание, что связь с пользователем не выдает никакой ошибки

это мои модели user.py

class User(db.Model):
    __tablename__ = "user"

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    email = db.Column(db.String(255), unique=True, nullable=False)
    registered_at = db.Column(db.DateTime, nullable=False)
    password_hash = db.Column(db.String(100))
    notes = db.relationship('Note', backref='user', lazy=True)
    todaynote = db.relationship('TodayNote', backref='user', uselist=False, lazy=True)
    lastlogin_at = db.Column(db.DateTime, nullable=False)
    keep_email = db.Column(db.String(255))
    keep_token = db.Column(db.String(500))
    keep_lastlogin_at = db.Column(db.DateTime)
    oneSignalId = db.Column(db.String(255))

note.py

class Note(db.Model):
    __tablename__ = 'note'

    id = db.Column(db.String(100), primary_key=True)
    title = db.Column(db.String(255))
    text = db.Column(db.Text)
    blobs = db.Column(db.String(500))
    labels = db.Column(db.String(255))
    created_at = db.Column(db.DateTime)
    updated_at = db.Column(db.DateTime)
    checked_at = db.Column(db.DateTime)
    like = db.Column(db.Boolean, default=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

todaynote.py

class TodayNote(db.Model):
    __tablename__ = 'todaynote'

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    note_id = db.Column(db.String(100))
    title = db.Column(db.String(255))
    text = db.Column(db.Text)
    blobs = db.Column(db.String(500))
    labels = db.Column(db.String(255))
    created_at = db.Column(db.DateTime)
    updated_at = db.Column(db.DateTime)
    checked_at = db.Column(db.DateTime)
    like = db.Column(db.Boolean, default=True)

Я думаю, что это импортпроблема, но нет никакой разницы между note.py и todaynote.py.

...