1

私はcouchdbkitでこれに何度も遭遇しました.couchdbkit Documentオブジェクトの下の子オブジェクトには親への参照がありません. 私が間違っていることを願っています:

class Child(DocumentSchema):
    name = StringProperty()
    def parent(self):
         # How do I get a reference to the parent object here?
         if self.parent.something:
              print 'yes'
         else:
              print 'no'

class Parent(Document):
    something = BooleanProperty()
    children = SchemaListProperty(Child)

doc = Parent.get('someid')
for c in doc.children:
    c.parent()

今私がやっていることは、親オブジェクトを渡すことですが、このアプローチは好きではありません。

4

2 に答える 2

1

私が時々することは、戻る前に属性を設定する親にget_childまたはメソッドを書くことです。すなわち:get_children_parent

class Parent(Document):
    something = BooleanProperty()
    children = SchemaListProperty(Child)
    def get_child(self, i):
        "get a single child, with _parent set"
        child = self.children[i]
        child._parent = self
        return child
    def get_children(self):
        "set _parent of all children to self and return children"
        for child in self.children:
            child._parent = self
        return children

次に、次のようなコードを記述できます。

class Child(DocumentSchema):
    name = StringProperty()
    def parent(self):
        if self._parent.something:
            print 'yes'
        else:
            print 'no'

これとcouchdbkitの欠点は明らかです。サブドキュメントごとにこれらのアクセサーメソッドを作成する必要があります(または、これらを追加する関数を巧妙に作成する場合)が、さらに厄介なことに、常にp.get_child(3)またはp.get_children()[3]を呼び出す必要があります。_parent前回電話をかけてから、sのない子を追加したかどうかを心配してくださいget_children

于 2010-12-03T17:27:29.670 に答える
1

私はcouchdbkitの作成者とチャットしましたが、どうやら私がやろうとしていることは現在サポートされていないようです.

于 2010-11-27T23:17:04.513 に答える