2013-04-24 50 views
2

我想在SQLAlchemy docs: Simplifying Association Objects与简化协会许多一对多的关系,访问额外的列对象

与示例正常工作,我所理解与挣扎是我如何可以访问special_key。最后,我希望能够做这样的事情:

for user in users 
    for keyword in user.keywords 
     keyword.special_key 

下面是来自例子代码:

class User(Base): 
__tablename__ = 'user' 
id = Column(Integer, primary_key=True) 
name = Column(String(64)) 

# association proxy of "user_keywords" collection 
# to "keyword" attribute 
keywords = association_proxy('user_keywords', 'keyword') 

def __init__(self, name): 
    self.name = name 

class UserKeyword(Base): 
__tablename__ = 'user_keyword' 
user_id = Column(Integer, ForeignKey('user.id'), primary_key=True) 
keyword_id = Column(Integer, ForeignKey('keyword.id'), primary_key=True) 
special_key = Column(String(50)) 

# bidirectional attribute/collection of "user"/"user_keywords" 
user = relationship(User, 
      backref=backref("user_keywords", 
          cascade="all, delete-orphan") 
     ) 

# reference to the "Keyword" object 
keyword = relationship("Keyword") 

def __init__(self, keyword=None, user=None, special_key=None): 
    self.user = user 
    self.keyword = keyword 
    self.special_key = special_key 

class Keyword(Base): 
__tablename__ = 'keyword' 
id = Column(Integer, primary_key=True) 
keyword = Column('keyword', String(64)) 

def __init__(self, keyword): 
    self.keyword = keyword 

def __repr__(self): 
    return 'Keyword(%s)' % repr(self.keyword) 

我在正确的轨道上在这里下面这个模式?

我的目标本质上是多对多的,包含一个布尔值的额外列。

回答

1

这应该工作:

for user in users: 
    for keyword in user.user_keywords: 
     print keyword.special_key