Django4全栈进阶之路23 项目实战(报修类型表):应用程序命名空间app_name和分页组件paginator
1、应用程序命名空间app_name
from django.urls import path
from . import views
from .views import RepairDetailView app_name = 'repair' urlpatterns = [
path('repair_types/', views.RepairTypeListView.as_view(), name='repair_type_list'),
path('repair_types/create/', views.RepairTypeCreateView.as_view(), name='repair_type_create'),
path('repair_types/<int:pk>/update/', views.RepairTypeUpdateView.as_view(), name='repair_type_update'),
path('repair_types/<int:pk>/delete/', views.RepairTypeDeleteView.as_view(), name='repair_type_delete'),]
2、模型
from django.db import models
from BaseApp.models import Department
from HRApp.models import Employee
from MyProject import settings
import uuid class RepairType(models.Model):
department = models.ForeignKey(Department, verbose_name="部门", on_delete=models.CASCADE, to_field='id',
related_name='RepairType_department')
name = models.CharField(verbose_name="类型", max_length=100)
parent = models.ForeignKey('self', verbose_name="父级", null=True, blank=True, on_delete=models.CASCADE,
related_name='RepairType_parent')
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name="创建账户", on_delete=models.CASCADE,
related_name='repair_types_created')
created_at = models.DateTimeField("创建时间", auto_now_add=True)
updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name="修改账户", on_delete=models.CASCADE,
related_name='repair_types_update')
updated_at = models.DateTimeField("修改时间", auto_now=True) def __str__(self):
return self.name class Meta:
verbose_name = "报修类型"
verbose_name_plural = "报修类型"
ordering = ['department', 'name']
3、表单
from django import forms
from .models import Department, RepairType, Repair class RepairTypeForm(forms.ModelForm):
class Meta:
model = RepairType
# fields = '__all__'
fields = ['name', 'parent', 'department']
parent = forms.ModelChoiceField(queryset=RepairType.objects.all().order_by('name'), required=False)
4、模板
list.html
{% extends 'base.html' %}
{% block content %}
<div class="container-fluid mt-3">
<div class="row">
<div class="col-md-12">
<h3 class="mb-3">维修类型列表</h3>
<a href="{% url 'repair:repair_type_create' %}" class="btn btn-primary mb-2">新增</a>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>序号</th>
<th>归属部门</th>
<th>类型名称</th>
<th>类型父级</th>
{# <th>创建账号</th>#}
{# <th>创建时间</th>#}
{# <th>修改账号</th>#}
{# <th>最后修改时间</th>#}
<th>操作</th>
</tr>
</thead>
<tbody>
{% for repair_type in repair_types %}
<tr>
<td>{{ repair_type.id }}</td>
<td>{{ repair_type.department }}</td>
<td>{{ repair_type.name }}</td>
<td>{{ repair_type.parent.name }}</td>
{# <td>{{ repair_type.created_by }}</td>#}
{# <td>{{ repair_type.created_time }}</td>#}
{# <td>{{ repair_type.modified_by }}</td>#}
{# <td>{{ repair_type.modified_time }}</td>#}
<td>
<a href="{% url 'repair:repair_type_update' repair_type.id %}"
class="btn btn-success btn-sm">编辑</a>
<a href="{% url 'repair:repair_type_delete' repair_type.id %}"
class="btn btn-danger btn-sm">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<nav aria-label="Page navigation">
<ul>
{% for article in articles %}
<li>
{{ article.title }}
</li>
{% endfor %}
</ul>
<ul class="pagination">
<!--#上一页-->
<!--当有上一页时-->
{% if page_obj.has_previous %}
<li><a href="{% url 'repair:repair_type_list' %}?page={{ page_obj.previous_page_number }}">上一页</a>
</li>
{% else %}
<li class="disabled"><a href="javascript:void(0)">上一页</a></li>
{% endif %}
<!--中间的页码,如果是当前页,添加active属性-->
{% for page in paginator.page_range %}
{% if page == page_obj.number %}
<li class="active">
<a href="{% url 'repair:repair_type_list' %}?page={{ page }}">{{ page }}</a>
</li>
{% else %}
<li><a href="{% url 'repair:repair_type_list' %}?page={{ page }}">{{ page }}</a></li>
{% endif %}
{% endfor %}
<!--#下一页-->
{% if page_obj.has_next %}
<li>
<a href="{% url 'repair:repair_type_list' %}?page={{ page_obj.next_page_number }}">下一页</a>
</li>
{% else %}
<li class="disabled"><a href="javascript:void(0)">下一页</a></li>
{% endif %}
</ul>
</nav>
</div>
</div>
</div>
{% endblock %}
create.html
{% block content %}
{% include 'repair/repair_type/form.html' with form=form button_text='新增' form_title="新增报修类型" %}
{% endblock %}
edit.html
{% block content %}
{% include 'repair/repair_type/form.html' with form=form button_text='保存' form_title='编辑报修类型' %}
{% endblock %}
form.html
{% extends 'base.html' %}
{% load widget_tweaks %}
{% block content %}
<div class="card mt-3">
<div class="card-header">
{{ form_title }}
</div>
<div class="card-body">
<form method="post">
{% csrf_token %}
<div class="form-group">
<label for="{{ form.name.id_for_label }}">类型名称:</label>
{{ form.name|attr:"class:form-control" }}
</div>
<div class="form-group">
<label for="{{ form.parent.id_for_label }}">父级部门:</label>
{{ form.parent|attr:"class:form-control" }}
</div>
<div class="form-group">
<label for="{{ form.department.id_for_label }}">责任部门:</label>
{{ form.department|attr:"class:form-control" }}
</div>
<button type="submit" class="btn btn-primary"> {{ button_text }}</button>
<a href="{% url 'repair:repair_type_list' %}" class="btn btn-secondary mr-2">
<i class="fas fa-arrow-left"></i> 返回
</a>
</form>
</div>
</div>
{% endblock %}
confirm_delete.html
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-12">
<h1>Delete Repair Type</h1>
</div>
</div>
<div class="row">
<div class="col-md-12">
<p>Are you sure you want to delete "{{ object }}"?</p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<form method="post">
{% csrf_token %}
<div class="modal-footer">
<a href="{% url 'repair:repair_type_list' %}" class="btn btn-secondary">Cancel</a>
<button type="submit" class="btn btn-danger">Delete</button>
</div>
</form>
</div>
</div>
</div>
{% endblock %}
Django4全栈进阶之路23 项目实战(报修类型表):应用程序命名空间app_name和分页组件paginator的更多相关文章
- web前端全栈学习之路
web前端全栈学习之路 --- 陆续更新中 一.HTML相关 1.HTML常用标签:http://www.cnblogs.com/wyb666/p/8733699.html 2.HTML5基础: 3. ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
- 你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦
你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦
- C#.Net全栈工程师之路-学习路径
C#.Net全栈工程师之路-学习路径 按架构分: C/S架构: B/S架构: Mobile移动开发: 按技术点分: C#编程基础以及OOP面向对象编程: 数据库基础以及高级应用(MYSQL+MSSQL ...
- Scala进阶之路-Scala中的高级类型
Scala进阶之路-Scala中的高级类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类型(Type)与类(Class)的区别 在Java里,一直到jdk1.5之前,我们说 ...
- “全栈2019”Java第四章:创建第一个Java程序
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 战争热诚的python全栈开发之路
从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...
- Python全栈开发之路 【第四篇】:Python基础之函数
本节内容 函数def: 1.位置参数,默认参数 2.位置参数,关键参数 3.如果参数中出现 *users,传递的参数就可以不再是固定的个数, 传过来的所有元素进行打包成元组 *args,**kwarg ...
- Python全栈开发之路 【第一篇】:Python 介绍
本节内容 一.Python介绍 python的创始人为荷兰人——吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本 ...
- Python全栈开发之路 【第七篇】:面向对象编程设计与开发(1)
本节内容 一.编程范式 编程指的是写程序.敲代码,就是指程序员用特定的语法.数据结构和算法编写的代码,目的是来告诉计算机如何执行任务的. 在编程的世界里最常见的两大流派是:面向过程与面向对象.“功夫的 ...
随机推荐
- 01. vim入门
0. 前言 我打算写一个系列文章,用来详细介绍vim的使用技巧,我会从头开始,从vim入门,到vim的各种配置,这是第一篇 1. vim 的三种模式 Normal mode (正常模式) Inster ...
- RPA的概念及未来发展趋势
RPA是Robotic Process Automation(机器人自动化)的简称.我们可以把它理解为"虚拟机器人"替代人工的一种方式.RPA不仅可以模拟人类,而且可以利用和融 ...
- Spring--注解开发+依赖注入
自动装配 数据层: 业务层: 自动装配: 结果: 若是将自动装配的注解放在set函数处: 结果: 结果相同,若是将set方法去掉的话: 结果: 这样的话,set方法也得到解放了耶! 以上都是按照类型装 ...
- vulnhub靶场之HACKSUDO: SEARCH
准备: 攻击机:虚拟机kali.本机win10. 靶机:hacksudo: search,下载地址:https://download.vulnhub.com/hacksudo/hacksudo-sea ...
- 全渠道定价、库存决策,运筹混合整数规划建模求解,MNL选择模型,内附代码!
0. 写在前面 刊论文!模型简单,代码实现更简单,墙裂推荐!可为运筹建模提供参考,也可作为全渠道零售研究的入门资料ε٩(๑> ₃ <)۶з 全文有点长,前面先放一个博文结构和涉及内容: 第 ...
- CISCN2021-第十四届全国大学生信息安全竞赛-WriteUp
WriteUp - Maple_root -CISCN2021 总结 总得分:3400 总排名:203 赛区排名:21 第一次认真参加正式的CTF,24+3小时的脑血栓比赛时长,收获还是很多的. 开卷 ...
- Linux服务器MySQL操作总结
目录 1. Navicat连接服务器MySQL 2. 如何查看MySQL用户名和密码 3. 修改MySQL的登录密码 4. 安装MySQL开发包(Centos7版) 错误:error 1045 (28 ...
- AllenBradley罗克韦尔CIP通信协议介绍 C# AllenBradley(CIP)读写操作PLC数据 C#罗克韦尔(CIP)PLC通信 全开源下载
罗克韦尔CIP通信协议(Control and Information Protocol)是一种面向对象的通信协议,它是用于工业自动化领域的数据通信协议.CIP协议可以在不同厂商.不同类型的自动化设备 ...
- vue之条件渲染v-if
目录 说明 语法 示例 说明 "vue条件渲染指令包括v-if.v-else.v-else-if.v-show. 语法 v-if="条件1&&条件2" # ...
- [Java EE] java.net.SocketException: Connection reset【解决中】
1 错误描述 6:44:33.112] [DEBUG] [http-nio-9527-exec-3] [HttpClientUtil] http post url:http://bdp-gateway ...