4-Django项目--资产管理

目录

项目结构

asset_data.html

asset_data/add_modify.html

views/asset_data.py

------资产管理--------

资产信息展示

views/asset_data.py

添加资产信息

添加和编辑的html可参考学员信息添加修改html

views/asset_data.py

修改信息资产

views/asset_data.py


项目结构

asset_data.html

{% extends "index/index.html" %}{% block content %}<div class="container"><div style="margin-bottom: 10px"><a class="btn btn-success" href="/add/asset/"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>添加资产</a></div><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">资产表</h3></div><div class="panel-body"><table class="table"><thead><tr><th>id</th><th>姓名</th><th>电话</th><th>借用日期</th><th>资产编号</th><th>归还状态</th><th>操作</th></tr></thead><tbody>{% for data in data_list %}<tr><th>{{ data.id }}</th><td>{{ data.name }}</td><td>{{ data.mobile }}</td><td>{{ data.data_time }}</td><td>{{ data.data_id }}</td>{% if data.ret_data == 1 %}<td style="color: green">{{ data.get_ret_data_display }}</td>{% else %}<td style="color: red">{{ data.get_ret_data_display }}</td>{% endif %}<td><a href="/modify/{{ data.id}}/asset/"><span style="color: green" class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a><a href="/delete/{{ data.id}}/asset/"><span style="color: red" class="glyphicon glyphicon-trash" aria-hidden="true"></span></a></td></tr>{% endfor %}</tbody></table></div></div></div>
{% endblock %}

asset_data/add_modify.html

{% extends "index/index.html" %}
{% load static %}{% block content %}<div class="container"><div class="panel panel-success"><div class="panel-heading"><h3 class="panel-title">{{ title }}</h3></div><div class="panel-body"><div class="form-group"><form method="post" novalidate>{% csrf_token %}{% for item in form %}<label for="exampleInputEmail1" class="col-sm-2" >{{ item.label }}</label>{{ item }}<span style="color: red">{{ item.errors.0 }}</span>{% endfor %}<button type="submit" class="btn btn-success">提交</button></form></div></div></div></div>{% endblock %}{% block js %}
{#    <script src="{% static 'js/layui.js' %}"></script>#}
{#    <script>#}
{#        layui.use(function () {#}
{#            var laydate = layui.laydate;#}
{#            // 渲染#}
{#            laydate.render({#}
{#                elem: '#id_class_time'#}
{#            });#}
{#        });#}
{#    </script>#}
{% endblock %}

views/asset_data.py

--资产数据函数视图.

# -*- coding:utf-8 -*-
from django.shortcuts import render, redirect, HttpResponse
from demo_one import models
from django import forms# 正则校验
from django.core.validators import RegexValidator
# 异常类
from django.core.exceptions import ValidationError# 资产信息展示
def asset_data(request):data_list = models.Asset.objects.all()return render(request, "asset_data/asset_data.html", {"data_list": data_list})# 添加资产
class Addasset(forms.ModelForm):# 创建一个手机号输入框,校验手机号的格式mobile = forms.CharField(label="手机号",validators=[RegexValidator(r"^1[3-9]\d{9}$", "请输入正确格式的手机号")])class Meta:model = models.Assetfields = ["name", "mobile", "data_time", "data_id", "ret_data"]# 排除某些字段# exclude = ["name"]def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control", "autocomplete": "off"}# 数据库做重复值判断 clean_字段(self)def clean_data_id(self):# 获取页面input框输入的资产编号data_id_txt = self.cleaned_data["data_id"]# 进入数据库,判断输入的资产编号是否存在# .exists() filter条件满足,则返回Trueexists = models.Asset.objects.filter(data_id=data_id_txt).exists()if exists:raise ValidationError("该资产已经被借用")# 如果资产编号不在数据库,则返回编号return data_id_txt# 增加资产信息
def add_asset(request):title = "添加资产"if request.method == "GET":form = Addasset()return render(request, "asset_data/add_modify.html", {"title": title, "form": form})form = Addasset(data=request.POST)if form.is_valid():form.save()return redirect("/asset/data/")return render(request, "asset_data/add_modify.html", {"title": title, "form": form})class Modifyasset(forms.ModelForm):data_time = forms.CharField(disabled=True, label="借用时间")class Meta:model = models.Assetfields = "__all__"def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control", "autocomplete": "off"}def clean_data_id(self):# 获取页面input框输入的资产编号data_id_txt = self.cleaned_data["data_id"]# 进入数据库,判断输入的资产编号是否存在# .exists() filter条件满足,则返回True# exclude(id=self.instance.pk) 忽略当前字段,你某个值的验证exists = models.Asset.objects.exclude(id=self.instance.pk).filter(data_id=data_id_txt).exists()if exists:raise ValidationError("该资产已经被借用,请重新修改")# 如果资产编号不在数据库,则返回编号return data_id_txt# 修改信息
def modify_asset(request, nid):title = "编辑资产信息"data_obj = models.Asset.objects.filter(id=nid).first()if request.method == "GET":form = Modifyasset(instance=data_obj)return render(request, "asset_data/add_modify.html", {"title": title, "form": form})form = Modifyasset(data=request.POST, instance=data_obj)if form.is_valid():form.save()return redirect("/asset/data/")return render(request, "asset_data/add_modify.html", {"title": title, "form": form})# 删除操作
def delete_asset(request, nid):models.Asset.objects.filter(id=nid).delete()return redirect("/asset/data/")

------资产管理--------

资产信息展示

  • views/asset_data.py
    from django.shortcuts import render, redirect, HttpResponse
    from demo_one import models
    from django import forms
    ​
    # 正则校验
    from django.core.validators import RegexValidator
    # 异常类
    from django.core.exceptions import ValidationError
    ​
    ​
    # 资产信息展示
    def asset_data(request):data_list = models.Asset.objects.all()return render(request, "asset_data/asset_data.html", {"data_list": data_list})
    ​

添加资产信息

  • 添加和编辑的html可参考学员信息添加修改html
  • views/asset_data.py
    # 添加资产
    class Addasset(forms.ModelForm):# 创建一个手机号输入框,校验手机号的格式mobile = forms.CharField(label="手机号",validators=[RegexValidator(r"^1[3-9]\d{9}$", "请输入正确格式的手机号")])
    ​class Meta:model = models.Assetfields = ["name", "mobile", "data_time", "data_id", "ret_data"]# 排除某些字段# exclude = ["name"]
    ​def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control", "autocomplete": "off"}
    ​# 数据库做重复值判断 clean_字段(self)def clean_data_id(self):# 获取页面input框输入的资产编号data_id_txt = self.cleaned_data["data_id"]# 进入数据库,判断输入的资产编号是否存在# .exists() filter条件满足,则返回Trueexists = models.Asset.objects.filter(data_id=data_id_txt).exists()if exists:raise ValidationError("该资产已经被借用")# 如果资产编号不在数据库,则返回编号return data_id_txt
    ​
    # 增加资产信息
    def add_asset(request):title = "添加资产"if request.method == "GET":form = Addasset()return render(request, "asset_data/add_modify.html", {"title": title, "form":form})
    ​form = Addasset(data=request.POST)if form.is_valid():form.save()return redirect("/asset/data/")return render(request, "asset_data/add_modify.html", {"title": title, "form": form})

修改信息资产

  • views/asset_data.py
    class Modifyasset(forms.ModelForm):data_time = forms.CharField(disabled=True, label="借用时间")class Meta:model = models.Assetfields = "__all__"
    ​def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control", "autocomplete": "off"}
    ​def clean_data_id(self):# 获取页面input框输入的资产编号data_id_txt = self.cleaned_data["data_id"]# 进入数据库,判断输入的资产编号是否存在# .exists() filter条件满足,则返回True# exclude(id=self.instance.pk) 忽略当前字段,你某个值的验证exists = models.Asset.objects.exclude(id=self.instance.pk).filter(data_id=data_id_txt).exists()if exists:raise ValidationError("该资产已经被借用,请重新修改")# 如果资产编号不在数据库,则返回编号return data_id_txt
    ​
    # 修改信息
    def modify_asset(request, nid):title = "编辑资产信息"data_obj = models.Asset.objects.filter(id=nid).first()if request.method == "GET":form = Modifyasset(instance=data_obj)return render(request, "asset_data/add_modify.html",{"title": title, "form": form})
    ​form = Modifyasset(data=request.POST,instance=data_obj)if form.is_valid():form.save()return redirect("/asset/data/")return render(request, "asset_data/add_modify.html", {"title": title, "form": form})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/18769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何为 kNN 搜索选择最佳 k 和 num_candidates

作者&#xff1a;Madhusudhan Konda 如何选择最好的 k 和 num_candidates&#xff1f; 向量搜索在当前的生成式人工智能/机器学习领域中已经成为一个改变游戏规则的技术。它允许我们基于语义含义而不仅仅是精确的关键词匹配来找到相似的项目。 Elasticsearch的 k-近邻&#x…

wxPython应用开发-后台线程更新大量数据到wxGrid避免ui无响应

一、问题描述 最近几天&#xff0c;我在用python开发一个数据处理的小工具。需要将xls文件中的大量数据&#xff08;少则几千行多则几万行&#xff09;读取出来后进行处理。其中一个功能是需要实现将读取到的原始数据和计算出来的结果在软件界面中以表格形式展示出来。 在pyt…

非线性优化:高斯-牛顿法的原理与实现

非线性优化&#xff1a;高斯-牛顿法的原理与实现 引言 在实际应用中&#xff0c;很多问题都是非线性的。非线性优化问题广泛应用于机器学习、数据拟合、工程设计等领域。高斯-牛顿法是一种常用于解决非线性最小二乘问题的迭代算法。本文将详细介绍高斯-牛顿法的原理、推导过程…

搜维尔科技:Movella Xsens用于动画,CG,短视频制作案例

用户名称 广州百漫文化传播有限公司 应用场景 基于Xsens MVN Link 动作捕捉系统的动画制作、CG制作、短视频制作、快速动画MAYA插件、影视动漫实时合成预渲染。 现场照片 《西行纪》内容简介&#xff1a;在远古神明的年代&#xff0c;世间存在着天众、龙众、阿修罗等八部众…

shell中编写备份数据库脚本(使用mysqldump工具)

mysqldump备份 目录 mysqldump备份 分库备份 分表备份 利用自带工具mysqldump 实现数据库分库分表备份。 要想知道需要备份哪些数据库&#xff0c;就得先列出来 mysql -uroot -pOpenlab123! -N -e show databases | egrep -on_schema|mysql|performance_schema|sys" …

JavaSE——类和对象(三)~~继承

目录 一.继承 1.为什么需要继承 2 .继承概念 3.继承的语法格式 4.继承的特性及好处 5.父类成员访问 6.继承关系上的代码块执行顺序​​​​​​​ 二.继承与组合 一.继承 1.为什么需要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物…

【记录】网络|没有路由器没有网线,分别使用手机或Windows电脑共享网络给ARM64开发板,应急连接

事情是这样的&#xff0c;我的开发板明明已经选择了记住热点 WiFi 密码&#xff0c;但是却没有在开机的时候自动连接&#xff0c;我又没有放显示器在身边&#xff0c;又不想为了这点事去找个显示器来&#xff0c;就非常难受。 我手边有的设备是&#xff1a; 笔记本电脑&#…

pytorch深度学习-环境搭建-2

1.1下载cudnn,解压 1.2.找到本级cuda安装路径 1.3.刚才解压文件复制到cuda安装目录 2.1 安装pytouch conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia 3.pytouch验证 我这儿是有问题的 PS C:\Users\Administrator\PycharmProjects\pyth…

【ORB_SLAM系列3】—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ORB_SLAM3源码编译二、ORB_SLAM3实时单目相机测试1. 查看摄像头的话题2. 运行测试 三. 运行测试可能的报错1. 报错一(1) 问题描述(2) 原因分析(3) 解决 2. …

防火墙技术基础篇:配置主备备份的双机热备

防火墙技术基础篇&#xff1a;配置主备备份的双机热备 防火墙双机热备&#xff08;High Availability, HA&#xff09;技术是网络安全中的一个关键组成部分&#xff0c;通过它&#xff0c;我们可以确保网络环境的高可靠性和高可用性。下面我们一起来了解防火墙双机热备的基本原…

python-合并排列数组 I

问题描述&#xff1a;合并两个按升序排列的整数数组a和b&#xff0c;形成一个新数组&#xff0c;新数组也要按升序排列。 问题示例&#xff1a;输入A[1],B[1],输出[1,1],返回合并后的数组。输入A[1,2,3,4],B[2,4,5,6],输出[1,2,2,3,4,4,5,6],返回合并所有元素后的数组。 完整代…

社交媒体数据恢复:百度贴吧

一、准备工作 请先确保您已登录百度账号&#xff0c;并熟悉百度贴吧的基本操作。 二、找回被系统删除的帖子 进入“我的”页面&#xff1a;在百度贴吧主页中&#xff0c;点击右下角的“我的”。 进入“我的帖子”页面&#xff1a;在个人中心页面中&#xff0c;点击“我的帖子…

力扣hot100:23. 合并 K 个升序链表

23. 合并 K 个升序链表 这题非常容易想到归并排序的思路&#xff0c;俩升序序列合并&#xff0c;可以使用归并的方法。 不过这里显然是一个多路归并排序&#xff1b;包含多个子数组的归并算法&#xff0c;这可以让我们拓展归并算法的思路。 假设n是序列个数&#xff0c;ni是…

大规模服务治理中etcd的实践与深度应用

导读&#xff1a;随着企业对于服务治理的日益重视&#xff0c;特别是在云原生和微服务架构的广泛应用下&#xff0c;百度小程序团队基于大模型服务治理的实战经验&#xff0c;结合分布式开源KV产品etcd&#xff0c;分享了其核心技术Raft与boltdb的实现原理&#xff0c;并深入剖…

Simulink从0搭建模型07-P8for循环的使用

Simulink从0搭建模型07-P8for循环的使用 今日学习内容1. For Iterator Subsystem模块介绍1.1. 累加器1.2. For Iterator1.3.小结 2. states介绍3. Set next i&#xff08;相当break)学习心得 今日学习内容 b站视频 【Simulink 0基础入门教程 P8 for循环的使用 For Itrator Sub…

基于 Coze 从 0-1 搭建专属 小白的Bot 机器人

基于 Coze 从 0-1 搭建专属 小白的Bot 机器人 ​ 作为一个GIS从业人员&#xff0c;对于AI的使用是必不可少的&#xff0c;在过去的一两年里各种大模型频出&#xff0c;AI技术已经成为GIS领域的一项重要工具&#xff0c;为我们提供了许多强大的功能和解决方案。看到好文章都在介…

【Android】【netd】网络相关调试技巧

网络调试技巧总结 ifconfig ifconfig 查看网卡信息 ifconfig -S tcpdump tcpdump -i any -n icmp 查看流量出入ip addr 上面的log 以及ifcong -S 信息可以知道&#xff0c;当前是从wlan0 网卡请求数据。 iptable iptable 部分指令 //禁止www.baidu.com 网址流量进入&a…

2024广东省赛 G.Menji 和 gcd

题目 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long long const int maxn 1e6 5, inf 1e12, maxm 4e4 …

【测评】雨云香港三区云服务器,2核2G 5兆,仅需38元/月

写在前面 雨云香港三区云服务器&#xff0c;高性能的 AMD EPYC 处理器 企业级 NVME SSD 高性能云服务器。2核2G 10兆 400G防御&#xff0c;仅需38元/月&#xff0c;年付7折仅 319.2元/年。 官网&#xff1a;https://www.rainyun.com 本次测评服务器配置如下&#xff1a; C…

【JavaScript】P1 JavaScript 是什么、其组成

1.1 JavaScript 是什么 JavaScript 是一种运行在浏览器的编程语言&#xff0c;用于实现人机交互效果。其作用包含&#xff1a; 监听用户行为并指导网页做出反馈。针对表单数据进行合法性验证。获取后台数据&#xff0c;渲染到前端界面。服务器编程&#xff0c;最后端的事情&a…