| #获取用户对应的职位role_list = models.Role.objects.filter(role2userinfo__user=user.pk)
 #获取登陆用户的职位对应的权限表中的排除掉菜单的parent_id=None的数据
 menu_leaf_list = models.Permission2Action.objects.filter(permission2action2role__role__in=role_list). \
 exclude(url__menu__isnull=True).values("url__url","url__id", "url__title","url__menu").distinct()
 #创建空字典
 menu_leaf_dict = {}
 #循环菜单中有parent_id的列表
 for item in menu_leaf_list:
 #修改item字典数据名称并创建child空列表
 item = {
 "id": item["url__id"],
 "url": item["url__url"],
 "title": item["url__title"],
 "parent_id": item["url__menu"],
 "child": [],
 }
 #如果menu_leaf_dict中包含parent_id就把数据添加到parent_id对应的列表中
 if item["parent_id"] in menu_leaf_dict:
 menu_leaf_dict[item["parent_id"]].append(item)
 else:
 #如果不包含parent_id就在parent_id对应的values中创建一个空列表并把值添加到列表中
 menu_leaf_dict[item["parent_id"]] = [item, ]
 
 for k,v in menu_leaf_dict.items():
 print(k,v)
 # 获取菜单的值
 menu_list = models.Menu.objects.values( "id", "title", "parent_id")
 # 创建空字典
 menu_dict = {}
 #遍历menu_list的所有元素并且在每个元素下创建一个key为child value为[]的元素
 for item1 in menu_list:
 item1["child"] = []
 #以菜单列表的每个元素的id为key 每个元素为value添加到menu_dict字典中
 menu_dict[item1["id"]] = item1
 # 遍历menu_leaf_dict把value添加到menu_dict的key相同的元素下
 for k, v in menu_leaf_dict.items():
 menu_dict[k]["child"] = v
 
 result = []
 # 遍历menu_dict的value也可以使用for row in menu_list获取每个菜单的所有元素
 for row in menu_dict.values():
 if row["parent_id"]:
 #如果value中parent_id不为None就把这个value添加到每个元素的parent_id和menu_dict[row[]"parent_id]相
 # 对应的child列表中
 menu_dict[row["parent_id"]]["child"].append(row)
 else:
 #如果parent_id为None就把值添加到result中,因为根菜单的paient_id都为None所以会先添加根菜单到result中
 # 不需要把所有的元素都添加到child中因为列表和字典都是引用类型,所有的元素都会根据内存地址引用到相对应的
 # 根菜单中
 result.append(row)
 |