Иногда я пишу метод 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
.