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