在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 forms
class 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.label
else:
field.widget.attrs = {
"class": "form-control",
"placeholder": field.label
}
class BootStrapModelForm(BootStrap, forms.ModelForm):
pass
class BootStrapForm(BootStrap, forms.Form):
pass
然后我们接着定义DeptModelForm类,继承BootStrapModelForm
"""部门类的ModelForm"""
class DeptModelForm(BootStrapModelForm):
class Meta:
model = Dept
fields = "__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})
效果如下:
到此,就实现了新建部门的功能。