class RecursiveField(serializers.Serializer):
# 这个类代码保持不变
def to_representation(self, value):
serializer = self.parent.parent.__class__(value, context=self.context)
return serializer.data
class AreaSerializers(serializers.ModelSerializer):
# children = AreaSerializers2(many=True)
# children = AreaSerializers(mang=True)
children = RecursiveField(many=True, required=False)
class Meta:
model = Area
fields = ['Id', 'Name', 'children'] # 'children' 'Code', 'other'
# fields = '__all__'
# depth = 8
MPTT模型实例方法
get_ancestors(ascending=False, include_self=False) # 返回一个包含所有当前实例祖宗的queryset
get_children() # 返回包换当前实例的直接孩子的queryset(即下一级所有的子节点),按树序排列
get_descendants(include_self=False) # 返回当前实例的所有子节点,按树序排列
get_descendant_count() # 返回当前实例所有子节点的数量
get_family() # 返回从当前实例开始的所有家庭成员节点,用树型结构
get_next_sibling() # 返回当前实例的下一个树型同级节点的实例
get_previous_sibling() # 返回当前实例的上一个树型同级节点的实例
get_root() # 获取当前实例的根节点实例
get_siblings(include_self=False) # 获取所有同级兄弟节点的实例的queryset
insert_at(target, position='first-child', save=False) # 插入作为目标节点的第一个子节点(如果save=True)
is_child_node() # 是否是子节点
is_leaf_node() # 是否是叶节点
is_root_node() # 是否是根节点
move_to(target, position='first-child') # 移动到某个节点的第一个子节点位置,target为空将会被移到根节点,此时不需要position位置参数
position位置参数:
'first-child', 'last-child','left', 'right'
网友评论