2015-08-15 34 views
0

我想要獲得多對多的關係工作。我有三個表與三個表的多對多關係(sql-alchemy)

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(64), index=True, unique=True) 

class Groups(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(1000)) 

class Members(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 
    group_id = db.Column(db.Integer, db.ForeignKey('groups.id')) 

我想要有選項group.members,它應該給我所有的用戶對象是該組的成員。我實現它通過以下方式

members = db.relationship('User', secondary="join(Members, User, Members.user_id == User.id)", primaryjoin="and_(Groups.id == Members.group_id)") 

這似乎工作,但是當我刪除組它給了我(有時候)錯誤

AttributeError的:「加入」對象有沒有屬性「刪除」

所以我想這不是實現這種關係的正確方法。 任何想法如何正確地做到這一點? 感謝 卡爾

回答

3

也許是爲了實現這個如下(改編自documentation在燒瓶SQLAlchemy的

members = db.Table('members', 
    db.Column('user_id', db.Integer, db.ForeignKey('user.id')), 
    db.Column('group_id', db.Integer, db.ForeignKey('groups.id')) 
) 

class Groups(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(1000)) 
    members = db.relationship('User', secondary=members, backref=db.backref('group', lazy='dynamic')) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(64), index=True, unique=True) 

而不是使用一個模型的結合表(成員),讓我們只用一個簡單的方法。一個簡單的表格

有了這個configuation,你可以輕鬆地添加/刪除成員和組:

u = User(username='matt') 
g = Groups(name='test') 
db.session.add(u) 
db.session.add(g) 
db.session.commit() 
g.members.append(u) 
db.session.commit() 
db.session.delete(g) 
db.session.commit() 
+0

該溶膠ution似乎正常工作......感謝Matt – carl