2012-04-21 67 views
0

我有一个模型User和一个模型Thing。 A User可以拥有零个或多个Thing s。 A Thing可能归零或更多User s。通常我会在第三个表Thing_OwnershipUser s添加到Thing秒,但我想借的SQLAlchemy的backref功能的优势,这样,如果我有一个User实例george我可以打电话给george.inventory拿到属于georgeThing的List 。没有链接表/模型的多对多关系

什么是最好的方式去做到这一点,或者我应该只是添加第三个模型,并实施User.inventory作为搜索通过第三个Thing_Ownership模型的相关关系?

回答

3

查看关于Many to Many关系的SQLAlchemy文档 - 它应该完全按照您要查找的内容进行操作。

所以,如果你有型号为UserThing,你可以设置一个二级参数在你们的关系:

from sqlalchemy import Table, Integer, Column, ForeignKey 
from sqlalchemy.orm import relationship, backref 
from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

association_table = Table('association', Base.metadata, 
    Column('user_id', Integer, ForeignKey('user.id')), 
    Column('thing_id', Integer, ForeignKey('thing.id')) 
) 

class User(Base): 
    __tablename__ = 'user' 
    # Whatever you need in this model 
    inventory = relationship('Thing', secondary = association_table, backref = 'users') 

class Thing(Base): 
    __tablename__ = 'thing' 
    # Whatever you need in this model 

然后,您可以通过调用访问实例为george的属于UserThing个列表george.inventory

希望这会有所帮助。

编辑:重读你的问题,看到你想用backref - 添加代码来做到这一点。
编辑2:遗漏了一个非常重要的部分。