diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" index cd97e71bbe707a9d2d0dc2c579966ad6f822fe98..c41c4769f740c33307a2cb36db127819a10a0385 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" @@ -2,15 +2,11 @@ - - - + + - - - - + + + + - @@ -267,9 +284,12 @@ - + + + + @@ -290,7 +310,29 @@ - + + + + + + + + + @@ -338,23 +385,23 @@ - + - - + - + - + @@ -458,13 +505,6 @@ - - - - - - - @@ -528,9 +568,16 @@ + + + + + + + - + @@ -538,33 +585,34 @@ - + - - + + - + - - + + - + + - + - - + + - + @@ -572,6 +620,16 @@ + + + + + + + + + + @@ -579,40 +637,55 @@ - + - - + + + + + - + - - + + - - + - + - - + + - + - + - - + + - + + + + + + + + + + + + + + diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/icon\347\210\254\350\231\253.py" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/icon\347\210\254\350\231\253.py" new file mode 100644 index 0000000000000000000000000000000000000000..d4755c32d6ff7914fdad87efd3cb2ca56232d1c6 --- /dev/null +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/icon\347\210\254\350\231\253.py" @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- +from django.utils.safestring import mark_safe +import requests +from bs4 import BeautifulSoup + +response = requests.get( + url='http://fontawesome.dashgame.com/', +) +response.encoding = 'utf-8' + +soup = BeautifulSoup(response.text, 'html.parser') +web = soup.find(attrs={'id': 'web-application'}) + +icon_list = [] + +for item in web.find_all(attrs={'class': 'fa-hover'}): + tag = item.find('i') + class_name = tag.get('class')[1] + icon_list.append([class_name, str(tag)]) + +print(icon_list) diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/forms.cpython-36.pyc" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/forms.cpython-36.pyc" index 797f331739742c115ad4f8ee6dd8acbc121a2956..4d7292b9a3f41b74d9adea68256204d0876ce612 100644 Binary files "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/forms.cpython-36.pyc" and "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/forms.cpython-36.pyc" differ diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/urls.cpython-36.pyc" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/urls.cpython-36.pyc" index dac31c21b402033997fb62f07a20fd0a092db263..f2713622de2064af05e365ecdd3da4e013dd76b9 100644 Binary files "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/urls.cpython-36.pyc" and "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/urls.cpython-36.pyc" differ diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/views.cpython-36.pyc" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/views.cpython-36.pyc" index 53f89351f1b8d002d0cea78701aaa63a0a3972ac..fdfd5d066284e492cbfae5c37fb6c84b77a6e3c9 100644 Binary files "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/views.cpython-36.pyc" and "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/views.cpython-36.pyc" differ diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/forms.py" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/forms.py" index ffc89fed36aba9736ec6024cf4472aa9ac257f4b..75233567dfa3c81ae41188b61ba0953d56307ed7 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/forms.py" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/forms.py" @@ -1,5 +1,6 @@ from django import forms from rbac import models +from django.utils.safestring import mark_safe class BSModelForm(forms.ModelForm): @@ -15,3 +16,470 @@ class RoleForm(BSModelForm): class Meta: model = models.Role fields = ['name'] + + +data = [['fa-address-book', ''], + ['fa-address-book-o', ''], + ['fa-address-card', ''], + ['fa-address-card-o', ''], + ['fa-adjust', ''], ['fa-american-sign-language-interpreting', + ''], + ['fa-anchor', ''], + ['fa-archive', ''], + ['fa-area-chart', ''], + ['fa-arrows', ''], + ['fa-arrows-h', ''], + ['fa-arrows-v', ''], + ['fa-asl-interpreting', ''], + ['fa-assistive-listening-systems', ''], + ['fa-asterisk', ''], + ['fa-at', ''], + ['fa-audio-description', ''], + ['fa-automobile', ''], + ['fa-balance-scale', ''], + ['fa-ban', ''], + ['fa-bank', ''], + ['fa-bar-chart', ''], + ['fa-bar-chart-o', ''], + ['fa-barcode', ''], + ['fa-bars', ''], + ['fa-bath', ''], + ['fa-bathtub', ''], + ['fa-battery', ''], + ['fa-battery-0', ''], + ['fa-battery-1', ''], + ['fa-battery-2', ''], + ['fa-battery-3', ''], + ['fa-battery-4', ''], + ['fa-battery-empty', ''], + ['fa-battery-full', ''], + ['fa-battery-half', ''], + ['fa-battery-quarter', ''], + ['fa-battery-three-quarters', ''], + ['fa-bed', ''], + ['fa-beer', ''], + ['fa-bell', ''], + ['fa-bell-o', ''], + ['fa-bell-slash', ''], + ['fa-bell-slash-o', ''], + ['fa-bicycle', ''], + ['fa-binoculars', ''], + ['fa-birthday-cake', ''], + ['fa-blind', ''], + ['fa-bluetooth', ''], + ['fa-bluetooth-b', ''], + ['fa-bolt', ''], + ['fa-bomb', ''], + ['fa-book', ''], + ['fa-bookmark', ''], + ['fa-bookmark-o', ''], + ['fa-braille', ''], + ['fa-briefcase', ''], + ['fa-bug', ''], + ['fa-building', ''], + ['fa-building-o', ''], + ['fa-bullhorn', ''], + ['fa-bullseye', ''], + ['fa-bus', ''], + ['fa-cab', ''], + ['fa-calculator', ''], + ['fa-calendar', ''], + ['fa-calendar-check-o', ''], + ['fa-calendar-minus-o', ''], + ['fa-calendar-o', ''], + ['fa-calendar-plus-o', ''], + ['fa-calendar-times-o', ''], + ['fa-camera', ''], + ['fa-camera-retro', ''], + ['fa-car', ''], + ['fa-caret-square-o-down', ''], + ['fa-caret-square-o-left', ''], + ['fa-caret-square-o-right', ''], + ['fa-caret-square-o-up', ''], + ['fa-cart-arrow-down', ''], + ['fa-cart-plus', ''], + ['fa-cc', ''], + ['fa-certificate', ''], + ['fa-check', ''], + ['fa-check-circle', ''], + ['fa-check-circle-o', ''], + ['fa-check-square', ''], + ['fa-check-square-o', ''], + ['fa-child', ''], + ['fa-circle', ''], + ['fa-circle-o', ''], + ['fa-circle-o-notch', ''], + ['fa-circle-thin', ''], + ['fa-clock-o', ''], + ['fa-clone', ''], + ['fa-close', ''], + ['fa-cloud', ''], + ['fa-cloud-download', ''], + ['fa-cloud-upload', ''], + ['fa-code', ''], + ['fa-code-fork', ''], + ['fa-coffee', ''], + ['fa-cog', ''], + ['fa-cogs', ''], + ['fa-comment', ''], + ['fa-comment-o', ''], + ['fa-commenting', ''], + ['fa-commenting-o', ''], + ['fa-comments', ''], + ['fa-comments-o', ''], + ['fa-compass', ''], + ['fa-copyright', ''], + ['fa-creative-commons', ''], + ['fa-credit-card', ''], + ['fa-credit-card-alt', ''], + ['fa-crop', ''], + ['fa-crosshairs', ''], + ['fa-cube', ''], + ['fa-cubes', ''], + ['fa-cutlery', ''], + ['fa-dashboard', ''], + ['fa-database', ''], + ['fa-deaf', ''], + ['fa-deafness', ''], + ['fa-desktop', ''], + ['fa-diamond', ''], + ['fa-dot-circle-o', ''], + ['fa-download', ''], + ['fa-drivers-license', ''], + ['fa-drivers-license-o', ''], + ['fa-edit', ''], + ['fa-ellipsis-h', ''], + ['fa-ellipsis-v', ''], + ['fa-envelope', ''], + ['fa-envelope-o', ''], + ['fa-envelope-open', ''], + ['fa-envelope-open-o', ''], + ['fa-envelope-square', ''], + ['fa-eraser', ''], + ['fa-exchange', ''], + ['fa-exclamation', ''], + ['fa-exclamation-circle', ''], + ['fa-exclamation-triangle', ''], + ['fa-external-link', ''], + ['fa-external-link-square', ''], + ['fa-eye', ''], + ['fa-eye-slash', ''], + ['fa-eyedropper', ''], + ['fa-fax', ''], + ['fa-feed', ''], + ['fa-female', ''], + ['fa-fighter-jet', ''], + ['fa-file-archive-o', ''], + ['fa-file-audio-o', ''], + ['fa-file-code-o', ''], + ['fa-file-excel-o', ''], + ['fa-file-image-o', ''], + ['fa-file-movie-o', ''], + ['fa-file-pdf-o', ''], + ['fa-file-photo-o', ''], + ['fa-file-picture-o', ''], + ['fa-file-powerpoint-o', ''], + ['fa-file-sound-o', ''], + ['fa-file-video-o', ''], + ['fa-file-word-o', ''], + ['fa-file-zip-o', ''], + ['fa-film', ''], + ['fa-filter', ''], + ['fa-fire', ''], + ['fa-fire-extinguisher', ''], + ['fa-flag', ''], + ['fa-flag-checkered', ''], + ['fa-flag-o', ''], + ['fa-flash', ''], + ['fa-flask', ''], + ['fa-folder', ''], + ['fa-folder-o', ''], + ['fa-folder-open', ''], + ['fa-folder-open-o', ''], + ['fa-frown-o', ''], + ['fa-futbol-o', ''], + ['fa-gamepad', ''], + ['fa-gavel', ''], + ['fa-gear', ''], + ['fa-gears', ''], + ['fa-gift', ''], + ['fa-glass', ''], + ['fa-globe', ''], + ['fa-graduation-cap', ''], + ['fa-group', ''], + ['fa-hand-grab-o', ''], + ['fa-hand-lizard-o', ''], + ['fa-hand-paper-o', ''], + ['fa-hand-peace-o', ''], + ['fa-hand-pointer-o', ''], + ['fa-hand-rock-o', ''], + ['fa-hand-scissors-o', ''], + ['fa-hand-spock-o', ''], + ['fa-hand-stop-o', ''], + ['fa-handshake-o', ''], + ['fa-hard-of-hearing', ''], + ['fa-hashtag', ''], + ['fa-hdd-o', ''], + ['fa-headphones', ''], + ['fa-heart', ''], + ['fa-heart-o', ''], + ['fa-heartbeat', ''], + ['fa-history', ''], + ['fa-home', ''], + ['fa-hotel', ''], + ['fa-hourglass', ''], + ['fa-hourglass-1', ''], + ['fa-hourglass-2', ''], + ['fa-hourglass-3', ''], + ['fa-hourglass-end', ''], + ['fa-hourglass-half', ''], + ['fa-hourglass-o', ''], + ['fa-hourglass-start', ''], + ['fa-i-cursor', ''], + ['fa-id-badge', ''], + ['fa-id-card', ''], + ['fa-id-card-o', ''], + ['fa-image', ''], + ['fa-inbox', ''], + ['fa-industry', ''], + ['fa-info', ''], + ['fa-info-circle', ''], + ['fa-institution', ''], + ['fa-key', ''], + ['fa-keyboard-o', ''], + ['fa-language', ''], + ['fa-laptop', ''], + ['fa-leaf', ''], + ['fa-legal', ''], + ['fa-lemon-o', ''], + ['fa-level-down', ''], + ['fa-level-up', ''], + ['fa-life-bouy', ''], + ['fa-life-buoy', ''], + ['fa-life-ring', ''], + ['fa-life-saver', ''], + ['fa-lightbulb-o', ''], + ['fa-line-chart', ''], + ['fa-location-arrow', ''], + ['fa-lock', ''], + ['fa-low-vision', ''], + ['fa-magic', ''], + ['fa-magnet', ''], + ['fa-mail-forward', ''], + ['fa-mail-reply', ''], + ['fa-mail-reply-all', ''], + ['fa-male', ''], + ['fa-map', ''], + ['fa-map-marker', ''], + ['fa-map-o', ''], + ['fa-map-pin', ''], + ['fa-map-signs', ''], + ['fa-meh-o', ''], + ['fa-microchip', ''], + ['fa-microphone', ''], + ['fa-microphone-slash', ''], + ['fa-minus', ''], + ['fa-minus-circle', ''], + ['fa-minus-square', ''], + ['fa-minus-square-o', ''], + ['fa-mobile', ''], + ['fa-mobile-phone', ''], + ['fa-money', ''], + ['fa-moon-o', ''], + ['fa-mortar-board', ''], + ['fa-motorcycle', ''], + ['fa-mouse-pointer', ''], + ['fa-music', ''], + ['fa-navicon', ''], + ['fa-newspaper-o', ''], + ['fa-object-group', ''], + ['fa-object-ungroup', ''], + ['fa-paint-brush', ''], + ['fa-paper-plane', ''], + ['fa-paper-plane-o', ''], + ['fa-paw', ''], + ['fa-pencil', ''], + ['fa-pencil-square', ''], + ['fa-pencil-square-o', ''], + ['fa-percent', ''], + ['fa-phone', ''], + ['fa-phone-square', ''], + ['fa-photo', ''], + ['fa-picture-o', ''], + ['fa-pie-chart', ''], + ['fa-plane', ''], + ['fa-plug', ''], + ['fa-plus', ''], + ['fa-plus-circle', ''], + ['fa-plus-square', ''], + ['fa-plus-square-o', ''], + ['fa-podcast', ''], + ['fa-power-off', ''], + ['fa-print', ''], + ['fa-puzzle-piece', ''], + ['fa-qrcode', ''], + ['fa-question', ''], + ['fa-question-circle', ''], + ['fa-question-circle-o', ''], + ['fa-quote-left', ''], + ['fa-quote-right', ''], + ['fa-random', ''], + ['fa-recycle', ''], + ['fa-refresh', ''], + ['fa-registered', ''], + ['fa-remove', ''], + ['fa-reorder', ''], + ['fa-reply', ''], + ['fa-reply-all', ''], + ['fa-retweet', ''], + ['fa-road', ''], + ['fa-rocket', ''], + ['fa-rss', ''], + ['fa-rss-square', ''], + ['fa-s15', ''], + ['fa-search', ''], + ['fa-search-minus', ''], + ['fa-search-plus', ''], + ['fa-send', ''], + ['fa-send-o', ''], + ['fa-server', ''], + ['fa-share', ''], + ['fa-share-alt', ''], + ['fa-share-alt-square', ''], + ['fa-share-square', ''], + ['fa-share-square-o', ''], + ['fa-shield', ''], + ['fa-ship', ''], + ['fa-shopping-bag', ''], + ['fa-shopping-basket', ''], + ['fa-shopping-cart', ''], + ['fa-shower', ''], + ['fa-sign-in', ''], + ['fa-sign-language', ''], + ['fa-sign-out', ''], + ['fa-signal', ''], + ['fa-signing', ''], + ['fa-sitemap', ''], + ['fa-sliders', ''], + ['fa-smile-o', ''], + ['fa-snowflake-o', ''], + ['fa-soccer-ball-o', ''], + ['fa-sort', ''], + ['fa-sort-alpha-asc', ''], + ['fa-sort-alpha-desc', ''], + ['fa-sort-amount-asc', ''], + ['fa-sort-amount-desc', ''], + ['fa-sort-asc', ''], + ['fa-sort-desc', ''], + ['fa-sort-down', ''], + ['fa-sort-numeric-asc', ''], + ['fa-sort-numeric-desc', ''], + ['fa-sort-up', ''], + ['fa-space-shuttle', ''], + ['fa-spinner', ''], + ['fa-spoon', ''], + ['fa-square', ''], + ['fa-square-o', ''], + ['fa-star', ''], + ['fa-star-half', ''], + ['fa-star-half-empty', ''], + ['fa-star-half-full', ''], + ['fa-star-half-o', ''], + ['fa-star-o', ''], + ['fa-sticky-note', ''], + ['fa-sticky-note-o', ''], + ['fa-street-view', ''], + ['fa-suitcase', ''], + ['fa-sun-o', ''], + ['fa-support', ''], + ['fa-tablet', ''], + ['fa-tachometer', ''], + ['fa-tag', ''], + ['fa-tags', ''], + ['fa-tasks', ''], + ['fa-taxi', ''], + ['fa-television', ''], + ['fa-terminal', ''], + ['fa-thermometer', ''], + ['fa-thermometer-0', ''], + ['fa-thermometer-1', ''], + ['fa-thermometer-2', ''], + ['fa-thermometer-3', ''], + ['fa-thermometer-4', ''], + ['fa-thermometer-empty', ''], + ['fa-thermometer-full', ''], + ['fa-thermometer-half', ''], + ['fa-thermometer-quarter', ''], + ['fa-thermometer-three-quarters', ''], + ['fa-thumb-tack', ''], + ['fa-thumbs-down', ''], + ['fa-thumbs-o-down', ''], + ['fa-thumbs-o-up', ''], + ['fa-thumbs-up', ''], + ['fa-ticket', ''], + ['fa-times', ''], + ['fa-times-circle', ''], + ['fa-times-circle-o', ''], + ['fa-times-rectangle', ''], + ['fa-times-rectangle-o', ''], + ['fa-tint', ''], + ['fa-toggle-down', ''], + ['fa-toggle-left', ''], + ['fa-toggle-off', ''], + ['fa-toggle-on', ''], + ['fa-toggle-right', ''], + ['fa-toggle-up', ''], + ['fa-trademark', ''], + ['fa-trash', ''], + ['fa-trash-o', ''], + ['fa-tree', ''], + ['fa-trophy', ''], + ['fa-truck', ''], + ['fa-tty', ''], + ['fa-tv', ''], + ['fa-umbrella', ''], + ['fa-universal-access', ''], + ['fa-university', ''], + ['fa-unlock', ''], + ['fa-unlock-alt', ''], + ['fa-unsorted', ''], + ['fa-upload', ''], + ['fa-user', ''], + ['fa-user-circle', ''], + ['fa-user-circle-o', ''], + ['fa-user-o', ''], + ['fa-user-plus', ''], + ['fa-user-secret', ''], + ['fa-user-times', ''], + ['fa-users', ''], + ['fa-vcard', ''], + ['fa-vcard-o', ''], + ['fa-video-camera', ''], + ['fa-volume-control-phone', ''], + ['fa-volume-down', ''], + ['fa-volume-off', ''], + ['fa-volume-up', ''], + ['fa-warning', ''], + ['fa-wheelchair', ''], + ['fa-wheelchair-alt', ''], + ['fa-wifi', ''], + ['fa-window-close', ''], + ['fa-window-close-o', ''], + ['fa-window-maximize', ''], + ['fa-window-minimize', ''], + ['fa-window-restore', ''], + ['fa-wrench', '']] + +ICON_CHOICES = [[i[0], mark_safe(i[1])] for i in data] + + +class MenuForm(BSModelForm): + class Meta: + model = models.Menu + fields = ['title', 'weight', 'icon'] + labels = { + 'weight': '权重' + } + widgets = { + 'icon': forms.RadioSelect(choices=ICON_CHOICES) + } diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templates/rbac/menu_list.html" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templates/rbac/menu_list.html" new file mode 100644 index 0000000000000000000000000000000000000000..4b56ed189106d5f82bb641a677e07cbd8a379501 --- /dev/null +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templates/rbac/menu_list.html" @@ -0,0 +1,54 @@ +{% extends 'layout.html' %} +{% block content %} +
+
+
+
菜单管理 + 新建 +
+ + + + + + + + + + + + {% for menu in all_menus %} + + + + + + {% endfor %} + + +
名称图标操作
{{ menu.title }} + + +
+ +
+
+
+
+
权限管理 + 批量操作 + 新建 + +
+
+ Panel content +
+
+
+ + +
+{% endblock %} \ No newline at end of file diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/urls.py" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/urls.py" index 701a6e34ae11083a1310b8652ece3bb3aeae5dee..f24c7dd76b50970b5aa3ba3a99dea8c619c04467 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/urls.py" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/urls.py" @@ -5,4 +5,8 @@ urlpatterns = [ url(r'^role/list/$', views.role_list, name='role_list'), url(r'^role/add/$', views.role_change, name='role_add'), url(r'^role/edit/(\d+)/$', views.role_change, name='role_edit'), + + url(r'menu/list/$', views.menu_list, name='menu_list'), + url(r'menu/add/$', views.menu_change, name='menu_add'), + url(r'menu/edit/(\d+)/$', views.menu_change, name='menu_edit'), ] diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/views.py" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/views.py" index ee0d60a198c418f9b9dcbef3d5fb1fc956ade56a..e36cee69d8249f4da886ccf9a2767d6c963a7c34 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/views.py" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/views.py" @@ -1,6 +1,6 @@ from django.shortcuts import render, redirect, reverse, HttpResponse from rbac import models -from rbac.forms import RoleForm +from rbac.forms import RoleForm,MenuForm def role_list(request): @@ -17,3 +17,19 @@ def role_change(request, pk=None): form_obj.save() return redirect(reverse('role_list')) return render(request, 'form.html', {'form_obj': form_obj}) + + +def menu_list(request): + all_menus = models.Menu.objects.all() + return render(request, 'rbac/menu_list.html', {'all_menus': all_menus}) + + +def menu_change(request, pk=None): + obj = models.Menu.objects.filter(pk=pk).first() + form_obj = MenuForm(instance=obj) + if request.method == 'POST': + form_obj = MenuForm(request.POST, instance=obj) + if form_obj.is_valid(): + form_obj.save() + return redirect(reverse('role_list')) + return render(request, 'form.html', {'form_obj': form_obj})