1

これが私のモデルです:

class ProductCategory(Storm):
    __storm_table__ = 'product_category'

    pcat_no = Int(primary = True)
    pcat_name = Unicode()

    pitem = ReferenceSet(pcat_no, 'ProductItem.pcat_id')
    catpurchase = ReferenceSet(pcat_no, 'Purchase.pcategory_id')

class ProductItem(Storm):
    __storm_table__ = 'product_item'
    __storm_primary__ = 'pcat_id', 'pitem_no'

    pcat_id = Int()
    pitem_no = Int()
    pitem_name = Unicode()

    pcat = Reference(pcat_id, ProductCategory.pcat_no)
    purchase = ReferenceSet([pcat_id, pitem_no], [Purchase.pcategory_id, Purchase.pitem_id])

class Purchase(Storm):
    __storm_table__ = 'purchase'

    id = Int(primary = True)
    date = Date()
    pcategory_id = Int() # it must refer to pcat_no of ProductCategory & pcat_id of ProductItem
    pitem_id = Int() # It must refer to pitem_no of ProductItem

    pcategory = Reference(pcategory_id, ProductCategory.pcat_no)
    product = Reference([pcategory_id, pitem_id], [ProductItem.pcat_id, ProductItem.pitem_no])

条件は、テーブルから利用可能なカテゴリのみ、またはカテゴリとアイテムの両方を選択することです(それぞれにドロップダウンがあります)。また、参照セットを使用して、カテゴリの詳細またはカテゴリとアイテムの両方の詳細への参照を戻したいと考えています。購入レコードを、category_no & name (pcategory_id のみが指定されている場合) または category_no & name, item_no & name (category と item の両方が指定されている場合) でリストしたいと考えています。& 私の要件を満たすレコードを挿入します。私が抱えている主な問題は、レコードを次のようにリストするときです。

print purchase_record.pcategory.pcat_name #it works fine but,
print purchase_record.product.pitem_name # it gives the error "RuntimeError: Reference used in an unknown class"
#thought 'purchase_record.pitem_id' holds some value

ORMとしてフラスコとストームを使用しています。表間で適切な参照を使用して製品カテゴリ名と製品項目名を取得する方法はありますか?

4

1 に答える 1

0

ここでの問題は、リストを使用して複合キーを宣言していることです。代わりにタプルを使用すると、例は期待どおりに機能するはずです。

class Purchase(Storm):
    ...
    product = Reference((pcategory_id, pitem_id), (ProductItem.pcat_id, ProductItem.pitem_no))

エラー メッセージは少しわかりにくいですが、ここでリストを使用しない理由があります。参照の両端が変更されてはならないため、リストのような変更可能な型は実際には適切ではありません。

于 2012-08-29T00:28:39.583 に答える