2013-03-02 4 views
1

그룹 개체를 그룹에 속한 구성원 목록으로 초기화하는 방법 (사용자는 그룹에 속한 그룹을 알고 있어야 함))?다 대다 관계로 개체 만들기

사용자는 많은 그룹이 있습니다. 그룹에는 많은 사용자가 있습니다.

나는 또한 사용자 클래스에서 add_to_group 메서드를 시도했지만 실제로 해결되지 않았습니다.

다 대 다 관계를 처음으로 다루므로 아직 수행 방법을 찾지 못했고 모든 게시물은 다 대다 관계를 쿼리하는 것이 아니라 그것을 써.

class User(db.Model): 
    __tablename__ = 'User' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(80), unique = False, nullable = False) 
    username = db.Column(db.String(80), unique = True, nullable = False) 
    fb_id = db.Column(db.String(80), unique = True, nullable = False) 
    groups = db.relationship('Groups', secondary=groups, backref=db.backref('User', lazy='dynamic')) 

groups = db.Table('groups', 
    db.Column('group_id', db.Integer, db.ForeignKey('Group.id')), 
    db.Column('user_id', db.Integer, db.ForeignKey('User.id')) 
) 

class Group(db.Model): 
    __tablename__ = 'Group' 
    id = db.Column(db.Integer, primary_key=True) 
    last_updated = db.Column(db.DateTime, mutable=True) 

    def __init__(self): 
     self.last_updated = datetime.utcnow(); 

고마워요!

+0

db.backref()의 첫 번째 매개 변수는 매핑 된 클래스의 이름이 아니라 backref 속성이 취해야하는 이름입니다. 따라서 일관성을 유지하기 위해 '사용자'에서 '사용자'로 변경하고 싶을 것입니다. 그러면'Group' 클래스의 각 인스턴스에서'users'라는 속성이 생성됩니다. –

+0

또한, db.relationship의 첫 번째 매개 변수는 관계의 다른쪽에있는 클래스의 이름이기 때문에'Groups'를'Group'으로 대체하려고합니다. –

+0

팁 주셔서 감사합니다. 내 코드를 적절하게 변경합니다. – GangstaGraham

답변

3

SQLAlchemy에서 다 대 다 관계는 값이 목록 인 특성으로 모델링됩니다.

u = User() 
g = [Group(), Group(), Group()] 

u.groups = g 

또한 자리에서 목록을 변경할 수 있습니다 : 당신의 한면을 변경하는 경우

g.users.append(User()) 

:

g1 = Group() 
u.groups.append(g) 

관계의 또 다른 측면은 동일한 방식으로 작동 것을 다 대다 관계를 유지하는 경우 SQLAlchemy는 다른면을 최신 상태로 유지합니다. 즉 Groupusers 목록에서 User을 제거하면 tha t Group은 더 이상 Usergroups 목록에 표시되지 않습니다.

+0

감사합니다. 솔직히 말해서 누군가가 응답하기를 기다리는 동안 Flask-SQLAlchemy 문서 (게시하기 전에 읽은) 대신 SQLAlchemy 설명서를 읽음으로써 실제로 이것을 알아 냈습니다. 하지만 도움을 주셔서 감사합니다! – GangstaGraham