Как создать связь один ко многим(one2many) в одной табице SqlAlchemy
У меня есть таблица Comment. Приложение подразумевает возможность отвечать на другие комментарии. Я бы хотел чтобы таблица содержала id комментария на который ответили, и "свои" ответы (то есть комментарии которые являются ответами на текущий. Как это сделать?
import sqlalchemy as sa
from datetime import datetime
from .db_session import SqlAlchemyBase
class Comment(SqlAlchemyBase):
__tablename__ = 'comments'
id = sa.Column(sa.Integer, primary_key=True, autoincrement=True)
text = sa.Column(sa.String)
like = sa.Column(sa.Integer, default=0)
dislike = sa.Column(sa.Integer, default=0)
create_time = sa.Column(sa.DateTime, default=datetime.now)
author = sa.orm.relationship('User', back_populates='comments')
author_id = sa.Column(sa.Integer, sa.ForeignKey('users.id'))
post = sa.orm.relationship('Post', back_populates='comments')
post_id = sa.Column(sa.Integer, sa.ForeignKey('posts.id'))
answer_id = sa.Column(sa.Integer, sa.ForeignKey('comments.id')) # на что ответили (id)
answer = sa.orm.relationship('Comment') # на что ответили (объект)
answers = sa.orm.relationship('Comment', back_populates='answer_id') # что нам ответили (list)
Текущий вариант выдаёт ошибку
sqlalchemy.exc.InvalidRequestError: back_populates on relationship 'Comment.answers' refers to attribute 'Comment.answer_id' that is not a relationship. The back_populates parameter should refer to the name of a relationship on the target class.
Ответы (1 шт):
Автор решения: Bobrovnikov Vladimir
→ Ссылка
Ссылка на эту же таблицу строится через remote_side.
Т.е. так:
answer = sa.orm.relationship('Comment', remote_side=[id], backref='answers')