美文网首页
drf mptt递归树 代码优化 可用

drf mptt递归树 代码优化 可用

作者: mutang | 来源:发表于2022-04-19 12:00 被阅读0次
    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'
    

    相关文章

      网友评论

          本文标题:drf mptt递归树 代码优化 可用

          本文链接:https://www.haomeiwen.com/subject/tqesertx.html