码迷,mamicode.com
首页 > 其他好文 > 详细

权限管理-菜单管理

时间:2018-08-11 21:57:45      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:引用类型   title   model   内存   mode   url   else   登陆用户   包含   

#获取用户对应的职位
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)

权限管理-菜单管理

标签:引用类型   title   model   内存   mode   url   else   登陆用户   包含   

原文地址:https://www.cnblogs.com/louzi/p/9461116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!