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)
本节内容 一.编程范式 编程指的是写程序.敲代码,就是指程序员用特定的语法.数据结构和算法编写的代码,目的是来告诉计算机如何执行任务的. 在编程的世界里最常见的两大流派是:面向过程与面向对象.“功夫的 ...
随机推荐
- Jquery中,$(this)的少许获取问题
这是原始代码,结果为解禁提示框中$(this)获取不到当前元素. 如上图,在提示方法外面声明一下$(this)并赋给$this,下面调用$this,即可获取当前元素.
- c++中文编码格式
c++程序中涉及到中文字符的输入输出以及其他操作经常会出现乱码.乱码主要是由于程序的源文件编码.可执行文件编码以及程序运行环境的编码不匹配导致.比如,c++源程序文件编码为GB18030, 在源程序中 ...
- Python学习笔记--数据可视化的开头
JSON数据格式的转换 示例: 若是有中文数据,可以在data后面加上ensure_ascii=False pyecharts模块 网站:https://gallery.pyecharts.org(有 ...
- 详解ResNet 网络,如何让网络变得更“深”了
摘要:残差网络(ResNet)的提出是为了解决深度神经网络的"退化"(优化)问题.ResNet 通过设计残差块结构,调整模型结构,让更深的模型能够有效训练更训练. 本文分享自华为云 ...
- 基于Kafka和Elasticsearch构建实时站内搜索功能的实践
作者:京东物流 纪卓志 目前我们在构建一个多租户多产品类网站,为了让用户更好的找到他们所需要的产品,我们需要构建站内搜索功能,并且它应该是实时更新的.本文将会讨论构建这一功能的核心基础设施,以及支持此 ...
- swagger-ui 导出离线文档md格式
<dependency> <groupId>io.github.swagger2markup</groupId> <artifactId>swagger ...
- 南昌航空大学-软件学院-22206104-段清如-JAVA第一次Blog作业
南昌航空大学-软件学院-22206104-段清如-JAVA第一次Blog作业 前言: 这个学期才开始接触java,到现在一个多月的时间,已经差不多可以写出一些基本的简单的程序了.对比上个学期学习的C语 ...
- WebSocket集群解决方案,不用MQ
首先不了解WebSocket的可以先看看这篇文章,以及传统的WebSocket方案是怎么做的,https://www.cnblogs.com/jeremylai7/p/16875115.html ...
- active
rabbitMQ与activeMQ区别 之前的项目中都用到了这两个消息队列 ActiveMq,传统的消息队列,使用Java语言编写.基于JMS(Java Message Service),采用多线程并 ...
- ACM-NEFUOJ-P209湖南修路
思路 prim的最小生成树,套上肝就完事了 代码 #include<iostream> #include<cstdio> #include<string.h> #d ...