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.mfbz.cn/a/890992.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

106页PPT企业管控模式方案:战略、产业与职能管理体系核心规划

企业集团管控模式的设计方案是一个复杂而系统的过程&#xff0c;其核心规划涉及到战略、产业与职能管理体系。以下是对这三个方面的详细规划&#xff1a; 一、战略规划 明确集团战略目标&#xff1a;集团应根据市场环境和自身优势&#xff0c;明确战略发展方向和目标&#xf…

Tailwind Starter Kit 一款极简的前端快速启动模板

Tailwind Starter Kit 是基于TailwindCSS实现的一款开源的、使用简单的极简模板扩展。会用Tailwincss就可以快速入手使用。Tailwind Starter Kit 是免费开源的。它不会在原始的TailwindCSS框架中更改或添加任何CSS。它具有多个HTML元素&#xff0c;并附带了ReactJS、Vue和Angul…

JavaScript 网页设计案例:使用 Canvas 实现趣味打气球小游戏

JavaScript 网页设计案例&#xff1a;使用 Canvas 实现趣味打气球小游戏 在网页设计中&#xff0c;交互性和趣味性是吸引用户的重要因素。借助 JavaScript 和 HTML5 的 canvas 元素&#xff0c;我们可以轻松实现各种动画效果&#xff0c;今天将带你打造一个有趣的 打气球小游戏…

Metasploit渗透测试之攻击终端设备和绕过安全软件

概述 在之前&#xff0c;重点讨论了针对服务器端的利用。但在当下&#xff0c;最成功的攻击都是针对终端的&#xff1b;原因是&#xff0c;随着大部分安全预算和关注都转向面向互联网的服务器和服务&#xff0c;越来越难找到可利用的服务&#xff0c;或者至少是那些还没有被破…

大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集数据共2w余副图像,mask准确标注滑坡位置

大规模多传感器滑坡检测数据集&#xff0c;利用landsat&#xff0c;哨兵2&#xff0c;planet&#xff0c;无人机图像等多种传感器采集数据共2w余副图像&#xff0c;mask准确标注滑坡位置 大规模多传感器滑坡检测数据集介绍 数据集概述 名称&#xff1a;大规模多传感器滑坡检测…

云计算第四阶段-----CLOUND二周目 04-06

cloud 04 今日目标&#xff1a; 一、Pod 生命周期 图解&#xff1a; [rootmaster ~]# vim web1.yaml --- kind: Pod apiVersion: v1 metadata:name: web1 spec:initContainers: # 定义初始化任务- name: task1 # 如果初始化任务失败&#…

计算机网络:数据链路层 —— 共享式以太网

文章目录 共享式以太网CSMA/CD 协议CSMA/CD 协议 的基本原理 共享式以太网的争用期共享式以太网的最小帧长共享式以太网的最大帧长共享式以太网的退避算法截断二进制指数退避算法 共享二进制以太网的信道利用率使用集线器的共享式以太网10BASE-T 共享式以太网 共享式以太网是当…

安宝特方案 | AR技术在轨交行业的应用优势

随着轨道交通行业不断向智能化和数字化转型&#xff0c;传统巡检方式的局限性日益凸显。而安宝特AR眼镜以其独特的佩戴方式和轻便设计&#xff0c;为轨道交通巡检领域注入了创新活力&#xff0c;提供了全新的解决方案。 01 多样化佩戴方法&#xff0c;完美适应户外环境 安宝特…

鸿蒙NEXT开发-知乎评论小案例(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

盘点超好用的 Windows 录屏软件,轻松记录屏幕精彩

在当今数字化信息高速流转的时代&#xff0c;屏幕录制已经成为我们日常工作、学习和娱乐中不可或缺的一项技能。如果你是微软电脑&#xff0c;正好我今天想要介绍的就是windows怎么录屏相关工具的操作&#xff0c;感兴趣就继续往下看吧。 1.FOXIT录屏大师 链接直达&#xff1…

鸿蒙开发实战项目【硅谷租房】--- 项目介绍

目录 一、简述 二、项目资料 2.1 UI设计稿 2.2 服务器 2.3 Apifox接口JSON文件 使用 Apifox 测试接口 一、简述 这是一个基于 鸿蒙 API12 开发的移动端租房 App&#xff0c;用户可以使用该应用搜索租房列表、查看房屋详情、预约租房等。 该项目的tabbar包含五部分&…

Ubuntu系统下的用户管理

Ubuntu系统下的用户管理 一、ubuntu介绍1.1 ubuntu简介1.2 主要特点 二、创建新用户2.1 查看当前Ubuntu版本2.2 创建新用户2.3 修改密码2.4 查看用户id 三、新建用户组3.1 新建用户组3.2 查询用户组3.3 加入某个用户组 四、赋予sudo权限4.1 将用户添加到 sudo 组4.2 查看admin用…

NFTScan | 10.07~10.13 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.10.07~ 2024.10.13 NFT Hot News ​01/ 数据&#xff1a;9 月份加密市场大多数指标均出现下降&#xff0c;链上总交易量下降 13% 10 月 7 日&#xff0c;据 The Block 研究总监 la…

【C#网络编程】基础概念2

文章目录 网络、数据包和协议网络数据包协议TCP、UDP 地址客户端和服务器套接字 网络、数据包和协议 计算机网络通过通信通道互连的机器组成&#xff0c;通常把这些机器称为主机和路由器&#xff0c;主机是是运行应用程序&#xff08;如 Web 浏览器&#xff09;的计算机。路由器…

同三维T80001HK4 四路4K30HDMI H.264编码器

4路同时编码&#xff0c;带4路3.5外置音频 同三维T80001HK4四路4K30HDMI H.264编码器 同三维T80001HK4用于高清视频信号&#xff08;4K30Hz&#xff09;编码及网络传输的硬件设备&#xff0c;采用最新高效H.264高清数字视频压缩技术&#xff0c;具备稳定可靠、高清晰度、低码率…

CyberRt实践之Hello Apollo(Apollo 9.0版本)

apollo9.0环境安装参考官方网站 apollo.baidu.com/community/Apollo-Homepage-Document?docBYFxAcGcC4HpYIbgPYBtXIHQCMEEsATAV0wGNkBbWA5UyRFdZWVBEAU0hFgoIH0adPgCY%2BADwCiAVnEAhAILiAnABZxEgOzK1Y%2BQA51M3ROUnJBsbK2WZoyUdkBhcXoAMhlwDFlARnUXZdzE9AGY%2BbFINADYpUhCEFW…

JavaEE 多线程第二节 (多线程的简单实现Thread/Runable)

1. 创建线程&#xff08;继承 Thread 类&#xff09;步骤&#xff1a; 继承 Thread 类&#xff1a; 创建一个类并继承 Thread 类&#xff0c;然后重写 run() 方法&#xff0c;在该方法中写入线程执行的代码 class MyThread extends Thread {Overridepublic void run()…

SpringBoot 之 配置 RestTemplate + 跳过https 验证

上截图 目录文件结构 在配置文件下创建下面两个文件 文件内容 HttpsClientHttpRequestFactory.java package org.fri.config;import org.apache.http.ssl.SSLContexts; import org.apache.http.ssl.TrustStrategy; import org.springframework.context.annotation.Configur…

重学SpringBoot3-安装Spring Boot CLI

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-安装Spring Boot CLI 1. 什么是 Spring Boot CLI&#xff1f;2. Spring Boot CLI 的安装2.1. 通过 SDKMAN! 安装2.2. 通过 Homebrew 安装&#xff08;适…

SpringCloud-OpenFeign-服务接口调用

是什么 把需要暴露的api使用接口来暴露&#xff0c;客户端需要调用的时候&#xff0c;直接查看这个接口中有没有就可以了 通用步骤 架构说明 common模块 common 引入 openfeign 新建服务接口类 FeignClient(value "cloud-payment-service") // 服务名 public i…