当前位置: 首页 > article >正文

05 django管理系统 - 部门管理 - 修改部门

04我们已经实现了新增部门的功能,下面开始修改部门模块的实现。

按道理来说,应该是做成弹框样式的,通过ajax悄咪咪的发数据,然后更新前端数据,但是考虑到实际情况,先用页面跳转的方式实现,后面再用ajax的方式优化一下。

下面开始修改部门的操作。

首先给每一列数据新增一个操作动作,即删除/编辑。

{% extends 'base.html' %}

{% block content %}

    <div class="container-fluid">
        <div style="margin-bottom: 10px" class="clearfix">
            <div class="panel panel-default">
                <!-- Default panel contents -->
                <div class="panel-heading">
                    <a class="btn btn-primary" href="/dept/add/" role="button">添加部门</a>
                </div>
                <div class="panel-body">
                    <p>部门列表</p>
                </div>

                <!-- Table -->
                <table class="table">
                    <thead>
                    <tr>
                        <th>ID</th>
                        <th>name</th>
                        <th>head</th>
                        <th>phone</th>
                        <th>email</th>
                        <th>address</th>
                        <th>操作</th>
                    </tr>
                    </thead>
                    <tbody>
                    {% for obj in queryset %}
                        <tr>
                            <td>{{ obj.id }}</td>
                            <td>{{ obj.name }}</td>
                            <td>{{ obj.head }}</td>
                            <td>{{ obj.phone }}</td>
                            <td>{{ obj.email }}</td>
                            <td>{{ obj.address }}</td>

                            <td>
                                <a class="btn btn-success" href="/dept/{{ obj.id }}/edit_detail/" role="button">编辑部门</a>
                                <a class="btn btn-danger" href="/#" role="button">删除部门</a>
                        </tr>

                    {% endfor %}
                    </tbody>
                </table>
            </div>
        </div>
    </div>

{% endblock %}

效果如下:

下面我们来实现编辑的功能

配置URL路径

urlpatterns = [
    # 部门管理
    path("dept/list/", dept.dept_list),
    path("dept/add/", dept.dept_add),
    path("dept/<int:nid>/edit_detail/", dept.dept_editdetail),
]

定义dept_editdetail函数

"""修改部门"""
def dept_editdetail(request, nid):
    return render(request, 'dept_editdetail.html')

定义dept_editdetail.html

主要用于展示一个包含表单的页面:
1 继承基础模板:{% extends 'base.html' %} 表示该页面继承自 base.html 模板。
2 定义内容块:{% block content %}...{% endblock %} 定义了一个名为 content 的块,用于填充 base.html 中对应的内容区域。
3 显示标题:通过 {{ title }} 显示从 admin_add() 函数返回的标题。
4 生成表单:使用 {% csrf_token %} 添加 CSRF 保护;通过循环 {% for field in form %} 动态生成表单字段及其标签、错误信息。
5 提交按钮:提供一个“保存”按钮用于提交表单。

{% extends 'base.html' %}

{% block content %}
    <div class="container">


        <div class="panel panel-default">
            <div class="panel-heading">
                <!--title从admin_add()的return返回值中获取,通过模板变量title-->
                <h4 class="panel-title">{{ title }}</h4>
            </div>
        </div>


        <div class="panel-body">
            <form method="post" action="" novalidate>
                <!-- 如果在django中以post 方式提交表单,需要添加csrf_token -->
                {% csrf_token %}

                {% for field in form %}
                    <div class="form-group">
                        <label class="form-control">{{ field.label }}</label>
                        {{ field }}
                        <div class="text-danger">{{ field.errors.as_text }}</div>
                    </div>
                {% endfor %}

                <button type="submit" class="btn btn-success">保 存</button>
            </form>
        </div>


    </div>
{% endblock %}

 重新回到dept_editdetail函数,编写业务逻辑

1 通过nid获取指定ID的部门对象。
2 若对象不存在,重定向至部门列表页。
3 对GET请求,生成编辑表单并渲染页面。
4 对POST请求,验证表单数据后更新数据库或返回错误信息。

def dept_editdetail(request, nid):
    title = "修改部门"
    # 根据id,获取当前数据
    row_obj = models.Dept.objects.using('default').get(id=nid)
    print("row_obj", row_obj)

    # 如果数据不存在,则返回部门列表
    if not row_obj:
        print("数据不存在")
        return redirect('/dept/list')

    # 获取表单信息
    if request.method == 'GET':
        form = DeptEditModelForm(instance=row_obj)
        return render(request, 'dept_editdetail.html', {'form': form, 'title': title})

    form = DeptEditModelForm(data=request.POST, instance=row_obj)
    # print("当前的form", form)

    print("form.errors", form.errors)
    if form.is_valid():
        form.save()
        return redirect('/dept/list')
    return render(request, 'dept_editdetail.html', {'form': form, 'title': title})

 效果如下:

我们舱室修改这条数据的病区名称,从1病区改成10病区试试

发现是可以实现修改的。


http://www.kler.cn/news/355928.html

相关文章:

  • Linux :at crontab简述
  • 【论文解读系列】EdgeNAT: 高效边缘检测的 Transformer
  • 猫鼠游戏: KaijiK病毒入侵溯源分析
  • (一)Java1.8核心包rt.jar——java.lang.annotation
  • Web APIs - 第2天笔记(黑马笔记)
  • MySQL的事务处理Savepoint,commit
  • 管家婆工贸ERP BB081.订单收付款功能
  • 【Vue】--项目文件结构
  • 线性可分支持向量机的原理推导 转为拉格朗日函数式 公式解析
  • 以太坊的未来面临挑战:Covalent Network(CXT)的 EWM 轻客户端提供解决方案
  • 大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集数据共2w余副图像,mask准确标注滑坡位置
  • C# -- Abstract、Virtual、interface
  • c++ 使用 Jarvis 算法或包装的凸包(Convex Hull using Jarvis’ Algorithm or Wrapping)
  • 问:JVM中的垃圾器,有哪些?
  • 嵌入式入门学习——7Protues导入Arduino IDE生成的固件和Arduino使用库文件开发
  • 大数据-177 Elasticsearch Query DSL - 聚合分析 指标聚合 桶聚合
  • 华为杯”第十三届中国研究生数学建模竞赛-E题:基于多目标规划和智能优化算法的粮食最低收购价政策研究(中)
  • 联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键
  • 16.数组、指针、结构体与函数
  • 【github】git基础用法 git flow工作模式 常用命令