04 django管理系统 - 部门管理 - 新增部门
在03,我们完成了部门列表的展示,下面进入新增部门的部分。
首先增加新增部门入口
<div class="panel-heading"><a class="btn btn-primary" href="/depart/add/" role="button">添加部门</a>
</div>
配置URL路由
urlpatterns = [# 部门管理path("dept/list/", dept.dept_list),path("dept/add/", dept.dept_add),
]
定义dept_add函数
"""新建部门"""
def dept_add(request):pass
我们使用ModelForm来实现。先重写ModelForm类,放在utils文件夹中,bootstrap.py
from django import formsclass BootStrap:bootstrap_exclude_fields = []def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环ModelForm中的所有字段,给每个字段的插件设置for name, field in self.fields.items():if name in self.bootstrap_exclude_fields:continue# 字段中有属性,保留原来的属性,没有属性,才增加。if field.widget.attrs:field.widget.attrs["class"] = "form-control"field.widget.attrs["placeholder"] = field.labelelse:field.widget.attrs = {"class": "form-control","placeholder": field.label}class BootStrapModelForm(BootStrap, forms.ModelForm):passclass BootStrapForm(BootStrap, forms.Form):pass
然后我们接着定义DeptModelForm类,继承BootStrapModelForm
"""部门类的ModelForm"""class DeptModelForm(BootStrapModelForm):class Meta:model = Deptfields = "__all__"
接着继续定义函数dept_add的业务逻辑
def dept_add(request):"""1. 获取表单数据2. 校验数据3. 保存数据4. 跳转页面"""title = '新建部门'if request.method == 'GET':form = DeptModelForm()return render(request, 'dept_add.html', {'form': form, 'title': title})
新建dept_add.html
{% extends 'base.html' %}{% block content %}<div class="container"><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title"> {{ title }} </h3></div><div class="panel-body"><form method="POST" action="" novalidate>{% csrf_token %}{% for field in form %}<div class="form-group"><label>{{ field.label }}</label>{{ field }}<span style="color: red;">{{ field.errors.0 }}</span></div>{% endfor %}<button type="submit" class="btn btn-primary">提 交</button></form></div></div></div>{% endblock %}
效果如下:
下面实现填写数据,并保存到数据库中去。使用ModelForm即可实现。
"""新建部门"""def dept_add(request):title = '新建部门'if request.method == 'GET':form = DeptModelForm()return render(request, 'dept_add.html', {'form': form, 'title': title})form = DeptModelForm(data=request.POST)if form.is_valid():form.save()return redirect('/dept/list')return render(request, 'dept_add.html', {'form': form, 'title': title})
效果如下:
到此,就实现了新建部门的功能。