2017-11-08 9 views
0

나는 이와 같은 모델을 가지고 있습니다. user_id을 부여하기위한SQLalchemy를 사용하여 테이블에서 사용자 목록 가져 오기

class Message(db.Model, CRUDMixin): 
    id = db.Column(db.Integer, primary_key=True, nullable=False) 
    from_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) 
    to_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) 
    from_user = db.relationship('User', foreign_keys=[from_id], uselist=False) 
    to_user = db.relationship('User', foreign_keys=[to_id], 
          uselist=False) 
    date = db.Column(db.TIMESTAMP(), nullable=False) 
    content = db.Column(db.String(500), nullable=False) 
    room_id = db.Column(db.Integer, db.ForeignKey("room.id"), nullable=False) 

은 무엇을 달성하고자, 나는 사용자가 메세지거나있는 사용자 사용자가 메시지를받은 누구에 사용자의 목록을 얻을 싶어요. 예를 들어

:

는 사용자 ID 1 이제

1 -> 2 

2 -> 1 

1 -> 3 

3 -> 2 

을 보내 1,2,3

메시지 ID가 3 사용자가 생각 나는 사용자를 얻으려면 id 2와 3이있는 목록. 사용자 2의 경우 1과 3이됩니다.

어떻게 구현합니까?

미리 감사드립니다.

답변

0

내 대답은 다음과 같습니다 : 귀하의 제안에 대한

def get_users(user_id): 
    messages = cls.query.filter(or_(cls.from_id == user_id, cls.to_id == user_id)).subquery() 

    users = User.query.join(messages, or_(messages.c.to_id == User.id, 
          messages.c.from_id == User.id)).filter(User.id != user_id) 

    return users 
0

당신이 한 일을 성취하기위한 한 가지 방법은 귀하의 기준을 충족시키는 사용자들의 노조를 이용하는 것입니다.

user_id = 1 

messaged_to = User.query.\ 
    join(Message, Message.to_id == User.id).\ 
    filter(Message.from_id == user_id) 

messages_from = User.query.\ 
    join(Message, Message.from_id == User.id).\ 
    filter(Message.to_id == user_id) 

query = messaged_to.union(messages_from) 
+0

감사합니다. :) – Pradeepb