我有一个模型User
和一个模型Thing
。 User
可以拥有零个或多个Thing
个。 Thing
可能由零个或多个User
拥有。通常我会添加第三个表Thing_Ownership
将User
添加到Thing
,但我想利用SQLAlchemy的backref功能,以便我有一个User
实例george
我可以致电george.inventory
获取属于Thing
的{{1}}个列表。
最好的方法是什么,或者我应该添加第三个模型并实施george
作为搜索相关关系的第三个User.inventory
模型?
答案 0 :(得分:3)
查看SQLAlchemy关于Many to Many关系的文档 - 它应该完全符合您的要求。
因此,如果您有User
和Thing
的模型,则可以在关系中设置辅助参数:
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
然后,您可以通过调用Thing
来访问属于User
george
george.inventory
backref
的{{1}}列表。
希望这有帮助。
编辑:重新阅读您的问题并看到您想使用{{1}} - 添加代码来执行此操作 编辑2:遗漏了一个非常重要的部分。