批量操作权限的页面展示

进行展示的时候, 肯定是通过formset 来完成这项工作。
1. 获取项目中所有的,想要的权限。 比如保存在一个集合中。 set1
2. 获取数据库中,已经录入了的所有权限。 保存在另一个集合中。 set2

下面 就出现了三种情况:(这里还是需要通过name字段,来进行 判断。 两个集合)
  情况一: set1 比 set2  多。  说明就要把 多出来的 添加到数据库。 批量添加
  情况二: set1 比 set2 少。说明中途可能弃用了一部分url。 数据库就要删除这部分。  批量删除。
  情况三: set1 和 set2 一样多。 但是可能url 改变了。 所以就需要将 set1 中查出的 与 set2 中中查出的, name一样。 url 不一样的,进行批量更新。

OK  大概也就这三种情况:  一个一个的实现:
1.  我已经从项目中获取了,所有的url。 还需要把数据库中,保存着的 permission 的所有信息全部拿到。

    permissions = models.Permission.objects.all().values("pk", "title", "name", "url", "menu_id", "pid_id")
    permission_dict = OrderedDict()
    permission_name_set = set()
    for row in permissions:
        permission_dict[row.get("name")] = row
        permission_name_set.add(row.get("name"))

在这里也是使用的  OerderdDict  有序字典。
然后放入到了一个  集合当中。 这个集合只放了   每一条记录中的  name 字段的。 信息。
看看什么样:

permission_name_set
{'role_edit', 'customer_edit', 'payment_add', 'payment_list', 'payment_del', 'second_menu_del', 'role_list', 'menu_list',
'menu_del', 'customer_del', 'user_list', 'customer_import', 'user_add', 'user_del', 'permission_edit', 'permission_add',
'customer_tpl', 'reset_pwd', 'second_menu_add', 'menu_add', 'customer_list', 'menu_edit', 'user_edit', 'payment_edit',
'second_menu_edit', 'permission_del', 'customer_add', 'role_add', 'role_del'}

自动获取, 得到的也是一个字典。  也需要将每一个 字典的key 保存到一个集合当中:

all_url_dict = get_all_url_dict()
router_name_set = set(all_url_dict.keys())
router_name_set
{'role_edit', 'customer_edit', 'payment_add', 'multi_permissions', 'payment_list', 'payment_del', 'second_menu_del', 'role_list',
'menu_list', 'menu_del', 'customer_del', 'user_list', 'customer_import', 'user_add', 'user_del', 'permission_edit',
'permission_add', 'customer_tpl', 'reset_pwd', 'second_menu_add', 'menu_add', 'customer_list', 'menu_edit', 'user_edit',
'payment_edit', 'second_menu_edit', 'permission_del', 'customer_add', 'role_add', 'role_del'}

两个集合有了: 该做差集 并集 操作了!
情况一。 添加操作: 自动获取中有的, 数据库没有的, 需要进行添加到数据库:

    # 3.1 计算出应该添加的name 并生成 formset (自动发现有的,数据库没有的。所以要循环的是 自动发现查询出的字典)
    generate_name_list = router_name_set - permission_name_set  # 增加列表
    generate_formset_class = formset_factory(MultiAddPermissionForm, extra=0)
    generate_formset = generate_formset_class(
        initial=[row_dict for name, row_dict in all_url_dict.items() if name in generate_name_list])

这里有关 formset的操作,不再说:

猜你喜欢

转载自www.cnblogs.com/chengege/p/10723314.html