френдов
class User:
connections = relationship('Connection', foreign_keys=[Connection.user_id], back_populates='friend')
friends = relationship(
'User',
secondary='connection',
primaryjoin=and_(id == Connection.user_id, Connection.status == ConnectionStatus.connected),
secondaryjoin=id == Connection.friend_id
)
class Connection(ModelBase):
__tablename__ = 'connection'
__table_args__ = (
UniqueConstraint('user_id', 'friend_id', name='_user_friend_uc'),
)
id = Column(Integer, primary_key=True)
user_id = Column(UUID(as_uuid=True), ForeignKey('users.id'))
friend_id = Column(UUID(as_uuid=True), ForeignKey('users.id'))
status = Column(Enum(ConnectionStatus), nullable=False)
user = relationship('User', foreign_keys=[user_id])
friend = relationship('User', foreign_keys=[friend_id], back_populates='connections')
Представим что есть юзер_1 и юзер_2
юзер_1 отправил инвайт юзеру_2
Connection(user=user_1, friend=user_2)
Если текущий юзер = user_1 -> user.friends / user.connections будет работать как должно, но если текущий юзер = user_2, у меня будут пустые релейшены френдов и конекшенов.
Я вот думаю или делать конекшен "в обе стороны", типа в момент создания делать вот так:
Connection(user=user_1, friend=user_2)
Connection(user=user_2, friend=user_1) (но мне кажется это полный бред)
Или можно попробовать поправить что-то в релейшенах? Но я не понимаю что и как именно нужно поправлять. Либо у меня структура БД вообще не правильная... Как это делается? Памагите пожалуйста
Тишка, глянь пожалуйста 🥺
я подождал пока холивар успокоится и все к чему-то общему придут. И начнут хейтить меня)))) Реально, пацаны, если я долбоеб так и скажите
Хранить лишние строки в бд выглядит так себе. Чтобы релейшены поправить, можешь написать кастомный prymaryjoin
Обсуждают сегодня