drf mptt递归树 代码优化 可用

2022-04-19  本文已影响0人  mutang
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'
上一篇下一篇

猜你喜欢

热点阅读