Como posso obter um relacionamento muitos-para-muitos auto-referenciado no SQLAlchemy ORM, referenciando novamente o mesmo atributo?

Estou tentando implementar um relacionamento auto-referencial muitos para muitos usando declarativo em SQLAlchem

O relacionamento representa amizade entre dois usuários. On-line, eu descobri (na documentação e no Google) como fazer um relacionamento m2m auto-referencial, onde as funções são diferenciadas. Isso significa que, nessas relações m2m, o Usuário A é, por exemplo, o chefe do UsuárioB, então ele o lista sob um atributo 'subordinados' ou o que você tem. Da mesma forma, o UsuárioB lista o UsuárioA em 'superiores'.

Isto não constitui problema, porque podemos declarar um backref para a mesma tabela desta maneira:

subordinates = relationship('User', backref='superiors')

Portanto, é claro, o atributo 'superiores' não é explícito dentro da class

De qualquer forma, aqui está o meu problema: e se eu quiser voltar ao mesmo atributo em que estou chamando o backref? Como isso

friends = relationship('User',
                       secondary=friendship, #this is the table that breaks the m2m
                       primaryjoin=id==friendship.c.friend_a_id,
                       secondaryjoin=id==friendship.c.friend_b_id
                       backref=??????
                       )

Isso faz sentido, porque se A faz amizade com B, os papéis de relacionamento são os mesmos e, se eu chamar os amigos de B, deveria ter uma lista com A. Este é o código problemático na íntegra:

friendship = Table(
    'friendships', Base.metadata,
    Column('friend_a_id', Integer, ForeignKey('users.id'), primary_key=True),
    Column('friend_b_id', Integer, ForeignKey('users.id'), primary_key=True)
)

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)

    friends = relationship('User',
                           secondary=friendship,
                           primaryjoin=id==friendship.c.friend_a_id,
                           secondaryjoin=id==friendship.c.friend_b_id,
                           #HELP NEEDED HERE
                           )

Desculpe, se este é muito texto, eu só quero ser o mais explícito possível com isso. Não consigo encontrar nenhum material de referência para isso na Web.

questionAnswers(4)

yourAnswerToTheQuestion