2

1 対多の関係を持つ 2 つのマップされたクラスがあります。

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

class Product(...):
    pass

を指定すると、この関係を内省できます。つまり、属性名を取得し、 backrefPart.product属性名も取得できます。

>>> 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 属性、例では「product」) にアクセスする方法がわかりません。

>>> 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この場合、ハックとして使用することを検討することをお勧めします。

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 に答える