数据库:
class Menu(models.Model): title = models.CharField(verbose_name='一级菜单名称', max_length=32) icon = models.CharField(verbose_name='图标', max_length=32) def __str__(self): return self.title class Permission(models.Model): """ 权限表 """ title = models.CharField(verbose_name='标题', max_length=32) url = models.CharField(verbose_name='含正则的URL', max_length=128) menu = models.ForeignKey(verbose_name='所属菜单', null=True, blank=True, to='Menu', on_delete=models.CASCADE) pid = models.ForeignKey(verbose_name="关联的权限",to='Permission',null=True,blank=True,related_name='parents',on_delete=models.CASCADE) name = models.CharField(verbose_name="url别名",max_length=32,unique=True) def __str__(self): return self.title
forms(ChoiceField的使用):
from django import forms from app01.models import * class MultiPermissionForm(forms.Form): title = forms.CharField( widget=forms.TextInput(attrs={'class':'form-control'}) ) url = forms.CharField( widget=forms.TextInput(attrs={'class': 'form-control'}) ) name = forms.CharField( widget=forms.TextInput(attrs={'class':'form-control'}) ) menu_id = forms.ChoiceField( #########choices = [(xxx,xxx),(xxx,xxx)] 下拉框每个选项 key value choices=[(None,'------------')], widget=forms.Select(attrs={'class': 'form-control'}), required = False ) pid_id = forms.ChoiceField( #######choices = [(xxx,xxx),(xxx,xxx)] 下拉框每个选项 key value choices=[(None, '-----------')], widget=forms.Select(attrs={'class': 'form-control'}), required=False ) def __init__(self,*args,**kwargs): ####给下拉框加选项 (数据库) super().__init__(*args,**kwargs) self.fields['menu_id'].choices += Menu.objects.values_list('id','title') self.fields['pid_id'].choices += Permission.objects.filter(pid__isnull=True).exclude( menu__isnull = True ).values_list('id','title')
views(form_set的使用):
from django.shortcuts import render from app01.myforms.customform import MultiPermissionForm from django.forms import formset_factory ########引入模块######## # Create your views here. def multi_add(request): form_class = formset_factory(MultiPermissionForm,extra=5) #######用哪个form 生成几个form
formset= form_class() return render(request,'multi_add.html',locals())
templates:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!-- 最新版本的 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> </head> <body> <div class="container"> <div class="col-md-4 col-md-offset-3"> <form> {% for form in formset %} <hr> {% for field in form %} {{ field.label }} {{ field }} {% endfor %} {% endfor %} </form> </div> </div> </body> </html>
5个
放到表格提交数据:
-templagets:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
<div class="col-md-offset-2">
<form method="post">
{% csrf_token %}
<table>
<thead>
<tr>
<td>title</td>
<td>url</td>
<td>name</td>
<td>menu_id</td>
<td>pid_id</td>
</tr>
</thead>
<tbody>
{% for form in formset%}
<tr>
{% for field in form %}
<td>{{ field }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
<input type="submit" value="提交">
</form>
</div>
</div>
</body>
</htm>
- views: