Как инициализировать объект метаданных во Flask-sqlalchemy? - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь создать отношение «многие ко многим» между моими тремя классами моделей в трех отдельных файлах: «Пользователь», «Проекты» и «Платежи» (это класс ассоциации), однако я получаю эту ошибку:

sqlalchemy.exc.NoReferencedColumnError: Could not initialize target column for ForeignKey 'projects.id,' on table 'payments': table 'projects' has no column named 'id,'

После попытки отладки в течение нескольких дней, я считаю, что моя проблема в том, что у меня нет объекта метаданных: «Сортировать связанные таблицы на основе их зависимостей, чтобы можно было создавать ограничения внешнего ключа в правильном порядке». Здесь обсуждается: Понимание метаданных () из SQLAlchemy в Python

Итак, как мне настроить объект метаданных и отсортировать мои таблицы, чтобы ограничения внешнего ключа создавались в правильном порядке в отдельных файлах? И если я сделаю это, это решит ошибку NoReferencedColumnError?

Вот мои классы моделей (ошибка возникает в классе платежей):

class User(UserMixin, ResourceMixin, db.Model):
    ROLE = OrderedDict([
        ('member', 'Member'),
        ('admin', 'Admin')
    ])

    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)

    # Relationships.
    payments = db.relationship(
        'Project', secondary='payments', 
        backref=db.backref('payees', lazy='dynamic')
    )

class Project(ResourceMixin, db.Model):
    __tablename__ = 'projects'
    id = db.Column(db.Integer, primary_key=True)

    # Relationships.
    users = db.relationship('User', secondary="payments")#backref='users')

    fund = db.Column(db.Integer, unique=False, index=True, server_default='0')
    goal = db.Column(db.Integer, nullable=False, server_default='15000')

class Payment(ResourceMixin, db.Model):
    __tablename__ = 'payments'
    id = db.Column(db.Integer, primary_key=True)

    # Payment details.
    user_id = db.Column(db.Integer, db.ForeignKey('users.id',
                                                  onupdate='CASCADE',
                                                  ondelete='CASCADE'),
                        index=True, nullable=False)
    project_id = db.Column(db.Integer, db.ForeignKey('projects.id,'))
    amount = db.Column(db.Integer) #Error occurs on this line.

    # Relationships.
    user = db.relationship('User', backref='payments')
    project = db.relationship('Project', backref='payments')
...