04 django管理系统 - 部门管理 - 新增部门

在03,我们完成了部门列表的展示,下面进入新增部门的部分。

首先增加新增部门入口

html 复制代码
<div class="panel-heading">
    <a class="btn btn-primary" href="/depart/add/" role="button">添加部门</a>
</div>

配置URL路由

python 复制代码
urlpatterns = [
    # 部门管理
    path("dept/list/", dept.dept_list),
    path("dept/add/", dept.dept_add),
]

定义dept_add函数

python 复制代码
"""新建部门"""
def dept_add(request):
    pass

我们使用ModelForm来实现。先重写ModelForm类,放在utils文件夹中,bootstrap.py

python 复制代码
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

python 复制代码
"""部门类的ModelForm"""


class DeptModelForm(BootStrapModelForm):
    class Meta:
        model = Dept
        fields = "__all__"

接着继续定义函数dept_add的业务逻辑

python 复制代码
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

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即可实现。

python 复制代码
"""新建部门"""


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})

效果如下:

到此,就实现了新建部门的功能。

相关推荐
264玫瑰资源库26 分钟前
问道数码兽 怀旧剧情回合手游源码搭建教程(反查重优化版)
java·开发语言·前端·游戏
普if加的帕1 小时前
java Springboot使用扣子Coze实现实时音频对话智能客服
java·开发语言·人工智能·spring boot·实时音视频·智能客服
施嘉伟1 小时前
Oracle 11g RAC ASM磁盘组剔盘、加盘实施过程
数据库·oracle
拉不动的猪1 小时前
前端自做埋点,我们应该要注意的几个问题
前端·javascript·面试
安冬的码畜日常2 小时前
【AI 加持下的 Python 编程实战 2_10】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(中)
开发语言·前端·人工智能·ai·扫雷游戏·ai辅助编程·辅助编程
烛阴2 小时前
Node.js中必备的中间件大全:提升性能、安全与开发效率的秘密武器
javascript·后端·express
小杨升级打怪中2 小时前
前端面经-JS篇(三)--事件、性能优化、防抖与节流
前端·javascript·xss
朝阳5812 小时前
Rust项目GPG签名配置指南
开发语言·后端·rust
朝阳5812 小时前
Rust实现高性能目录扫描工具ll的技术解析
开发语言·后端·rust
程高兴2 小时前
基于Matlab的车牌识别系统
开发语言·matlab