Итак, используя SqlAlchemy, я создаю довольно простое отношение «многие ко многим» между моделью пользователей и моделью комментариев.
users.py
class UsersModel(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(50))
email = Column(String(50))
issues = relationship(IssuesModel, backref="user")
comments = relationship(IssueCommentsModel, backref="user")
voted_comments = association_proxy('users_comments', 'comment')
def __init__(self, **fields):
self.__dict__.update(fields)
def __repr__(self):
return "<Users('%s', '%s', '%s')>" % (self.id,
self.username,
self.email)
users_comments.py
class UsersCommentsModel(Base):
__tablename__ = 'users_comments'
user_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
comment_id = Column(Integer, ForeignKey('issue_comments.id'), primary_key=True)
vote = Column(Integer(1))
user = relationship(UsersModel,
backref="users_comments")
comment = relationship(IssueCommentsModel,
backref="users_comments")
def __init__(self, **fields):
self.__dict__.update(fields)
def __repr__(self):
return "<UsersComments('%s', '%s', '%s')>" % (self.user_id,
self.comment_id,
self.vote)
issue_comments.py
class IssueCommentsModel(Base):
__tablename__ = 'issue_comments'
id = Column(Integer, primary_key=True)
body = Column(String(300))
created = Column(DateTime)
change_time = Column(DateTime)
score = Column(Integer(100), default=0)
issue_id = Column(Integer, ForeignKey('issues.id'))
user_id = Column(Integer, ForeignKey('users.id'))
voted_users = association_proxy('users_comments', 'user')
def __init__(self, **fields):
self.__dict__.update(fields)
def __repr__(self):
return "<IssueComments('%s', '%s', '%s', '%s', '%s', '%s')>" % (self.id,
self.body,
self.issue,
self.user,
self.created,
self.change_time)
Каждый пользователь имеет возможность создавать комментарии и голосовать за них вверх или вниз. Приведенный выше код полностью рабочий код. У меня вопрос такой. Когда я удаляю две ссылки в классе UsersCommentsModel, код больше не работает и выдается ошибка InvalidRequestError. В нем говорится, что атрибут users_comments не может быть найден в преобразователе UsersModel. Я подумал, что это странно, потому что я думаю, что вы сможете проксировать все отношения через центральную модель отношений users_comments, и вам никогда не придется хранить экземпляр этой модели в моделях users / comments.
Вопрос:
Есть ли способ удалить backrefs, поэтому в моделях пользователей / комментариев нет других атрибутов?