一级二级三级菜单处理逻辑
def get_role_permission(cls, permission_ids, is_admin=False):
permission_objs = Permission.objects.all()
permission_datas = PermissionSerializer(permission_objs, many=True).data
permission_datas_dict = {permission_data.get("id"): permission_data for permission_data in permission_datas}
first_menu_objs = list()
first_ids = list()
for permission_obj in permission_objs:
if permission_obj.parent_id == 0:
permission_id = permission_obj.id
first_data = permission_datas_dict.get(permission_id)
first_menu_objs.append(first_data)
first_ids.append(permission_id)
second_ids = list()
second_parents_dict = {first_id: list() for first_id in first_ids}
for permission_obj in permission_objs:
parent_id = permission_obj.parent_id
if parent_id in first_ids:
permission_id = permission_obj.id
second_data = permission_datas_dict.get(permission_id)
second_list = second_parents_dict.get(parent_id)
second_list.append(second_data)
second_ids.append(permission_id)
for first_id in first_ids:
first_data = permission_datas_dict.get(first_id)
first_data["child"] = second_parents_dict.get(first_id)
third_parents_dict = {second_id: list() for second_id in second_ids}
for permission_obj in permission_objs:
parent_id = permission_obj.parent_id
if parent_id in second_ids:
permission_id = permission_obj.id
third_data = permission_datas_dict.get(permission_id)
third_list = third_parents_dict.get(parent_id)
if is_admin:
third_list.append(third_data)
else:
if permission_id in permission_ids:
third_list.append(third_data)
for second_id in second_ids:
second_data = permission_datas_dict.get(second_id)
second_data["child"] = third_parents_dict.get(second_id)
return first_menu_objs