Как исправить ошибку sqlachemy, чтобы найти класс в отношениях «многие ко многим»? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть эти классы, но я не могу создать отношения image_history и island_history:

class HistoryModel(db.Model):
    __tablename__ = "history"

    id = db.Column(db.Integer, primary_key=True)
    created_at = db.Column(db.TIMESTAMP, default=datetime.utcnow)
    text = db.Column(db.Text)

class ImageHistoryModel(db.Model):
    __tablename__ = "image_history"

    image_id = db.Column(db.Integer, db.ForeignKey("image.id", ondelete="CASCADE"), nullable=False, primary_key=True)
    history_id = db.Column(db.Integer, db.ForeignKey("history.id", ondelete="CASCADE"), nullable=False, primary_key=True)
    customer_id = db.Column(db.Integer, db.ForeignKey("customer.id"), nullable=False, primary_key=True)

    customer = db.relationship("CustomerModel", lazy=True, uselist=False)
    images = db.relationship("ImageModel", backref=backref("image_histories", passive_deletes=True), lazy=True)
    histories = db.relationship(
        "HistoryModel", backref=backref("image_histories", passive_deletes=True), lazy=True, uselist=False
    )

class IslandHistoryModel(db.Model):
    __tablename__ = "island_history"
    island_id = db.Column(db.Integer, db.ForeignKey("island.id"), nullable=False, primary_key=True)
    history_id = db.Column(db.Integer, db.ForeignKey("history.id", ondelete="CASCADE"), nullable=False, primary_key=True)
    customer_id = db.Column(db.Integer, db.ForeignKey("customer.id"), nullable=False, primary_key=True)

    customer = db.relationship("CustomerModel", lazy=True, uselist=False)
    islands = db.relationship("IslandModel", backref="island_histories", lazy=True)
    histories = db.relationship(
        "HistoryModel", backref=backref("island_histories", passive_deletes=True), lazy=True, uselist=False
    )

, но при попытке запустить миграцию у меня появляется ошибка:

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

HistoryModel уже существует в БД, и все классы находятся в разных файлах.

...