0

我有一个模型User和一个模型Thing。AUser可以拥有零个或多个Things。AThing可能由零个或多个Users 拥有。通常我会添加第三个将 sThing_Ownership链接UserThings 的表,但我想利用 SQLAlchemy 的 backref 功能,这样如果我有一个User实例george,我可以调用george.inventory以获取Thing属于 s 的 s列表george

解决此问题的最佳方法是什么,或者我应该添加第三个模型并实现User.inventory为通过第三个Thing_Ownership模型搜索相关关系?

4

1 回答 1

3

查看 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

然后,您可以通过调用访问Thing属于User实例化 as的 s 列表。georgegeorge.inventory

希望这可以帮助。

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

于 2012-04-22T02:17:34.000 回答