2

我有两个具有一对多关系的映射类:

class Part(...):
    product = relationship('products', backref=backref('parts'))

class Product(...):
    pass

给定Part.product,我可以反省这种关系,即获取属性名,也可以获取backref属性名:

>>> rel = Part.product   # image it's passed in as a function parameter
>>> rel.property.key
'product'
>>> rel.property.backref[0]
'parts'

我也可以反过来访问这种关系:

>>> rel = Product.parts
>>> rel
<sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x3744fd0>
>>> rel.property.key
'parts'

但是,我不知道如何访问原始属性名称(又名 backref 的 backref 属性,在示例中又名“产品”):

>>> rel.property.backref is None
True

我必须在哪里挠痒痒Product.parts才能获得'product'

4

1 回答 1

4

我试图重现你所描述的情况,也得到Product.parts.property.backref = None了。在pycharm中调试后,我发现其他属性部分包含属性名称:

print Product.parts.property.backref
>>>None
print Product.parts.property.back_populates
>>>product

我建议考虑back_populates在这种情况下使用作为 hack。

back_populates 在文档 Linking Relationship Configuration:Relationships with Backref中有描述。根据文档,您需要像这样定义模型:

class Part(...):
    product = relationship('products', back_populates='parts')

class Product(...):
    parts = relationship('products', back_populates='product')
    pass
于 2013-01-18T17:01:57.910 回答