第10天|Django3.0项目实战,部门管理系统的表单升级(django进度管理系统)

如果你有仔细看《第9天 | Django3.0项目实战,部门管理系统的表单》中的forms.py文件的话,你就会知道,DepartmentForm类中的类型属性,和models的是一模一样的。

既然是一样,那是否可以进行合并呢?–答案肯定是Yes啦。

10.1 模型表单

在forms.py中,定义一个DepartmentModelForm类,继承forms.ModelForm,在其内部类Meta中进行一番折腾。

from django import formsfrom django.forms import widgetsfrom django.core.exceptions import ValidationErrorimport refrom .models import Departmentclass DepartmentModelForm(forms.ModelForm): class Meta: model = Department # 不显示exclude中指定的字段 exclude = ['createDate'] # 定义标签 labels = { 'name': '部门名称', 'leader': '负 责 人:', 'phone': '手 机 号:', 'region': '所在区域:', 'address': '办公位置:', 'longitude': '区域经度:', 'latitude': '区域纬度:', } choice = (("集团总部", "集团总部"), ("华南区域", "华南区域"), ("华北区域", "华北区域"), ("华东区域", "华东区域"),) # 定义html控件 widgets = { 'name': widgets.TextInput(attrs={"placeholder": "请输入部门名称", "class": "form-control"}), 'leader': widgets.TextInput(attrs={"placeholder": "请输入负责人", "class": "form-control"}), 'phone': widgets.NumberInput(attrs={"placeholder": "请输入手机号", "class": "form-control"}), 'region': widgets.Select(choices=choice, attrs={"class": "form-control"}), 'address': widgets.TextInput(attrs={"placeholder": "办公所在位置", "class": "form-control"}), 'longitude': widgets.NumberInput(attrs={"placeholder": "区域所在经度", "class": "form-control"}), 'latitude': widgets.NumberInput(attrs={"placeholder": "区域所在纬度", "class": "form-control"}), } # 定义错误提示信息 error_messages = { "name": { 'required': '部门名称不能为空,请输入!', 'max_length': "部门名称太长了!"}, 'leader': { 'required': '负责人不能为空,请输入!', 'max_length': '负责人名字太长了!'}, 'phone': { 'required': '手机号不能为空,请输入!'}, } # 手机号验证 def clean_phone(self): phone = str(self.cleaned_data.get('phone')) mobile_re = re.compile(r'^(13[0-9]|15[012356789] |17[678]|18[0-9]|14[57])[0-9]{8}$') if not mobile_re.match(phone): raise ValidationError('请输入正确的手机号!') return phone

DepartmentModelForm中Meta的内容定义是不是感觉似曾相识?没错,基本上可以直接从DepartmentForm拷贝过来,只是Meta更具条理性,更具可读性,它的属性选项,除了几个特有的,其他的跟Form中的含义是一样的。注意一点:自定义规则函数,不在Meta内部,而是在跟它平级的地方。Meta的属性选项一览表。

第10天|Django3.0项目实战,部门管理系统的表单升级(django进度管理系统)

10.2 业务逻辑

在views.py中改造create函数的同时,把其他功能(修改、详细信息、列表、模糊查询)也一并给实现了。其实一切并没那么复杂,就算是分页。

仔细阅读Views.py代码之后,不知你有没有发现:有一个与众不同,异于他人的人物–DepartmentList出现。如果有,那么恭喜你,你真的太适合当程序猿了;如果没有,那么也恭喜你,你终于有时间起身运动,醒醒目了。

from django.shortcuts import render, redirect, get_object_or_404from department.forms import DepartmentModelFormfrom department.models import Departmentfrom django.views.generic import ListView# 判断部门名称是否已存在def name_exist(name): is_exist = Department.objects.filter(name=name).exists() if is_exist: return True else: return False# 添加数据def create(request): form = DepartmentModelForm() if request.method == 'POST': msg = '' form = DepartmentModelForm(request.POST) if form.is_valid(): name = form.cleaned_data.get('name') if name_exist(name): form.add_error('name', "部门名称已存在,请确认!") msg = '' else: form.save() msg = '恭喜你,创建部门信息成功!' form = DepartmentModelForm() # 重置表单内容--清空 return render(request, 'department/create.html', {'form': form, 'msg': msg}) else: return render(request, 'department/create.html', {'form': form})# 修改数据def update(request, depart_id): department = get_object_or_404(Department, pk=depart_id) if request.method == 'POST': msg = '' form = DepartmentModelForm(request.POST) if form.is_valid(): name = form.cleaned_data.get('name') # 如果部门名称进行了修改,需要判断是否重名 if name != department.name and name_exist(name): form.add_error('name', "部门名称已存在,请确认!") msg = '' else: form.save() msg = '恭喜你,修改部门信息成功!' return render(request, 'department/update.html', {'form': form, "depart_id": depart_id, 'msg': msg}) else: form = DepartmentModelForm(instance=department) return render(request, 'department/update.html', {'form': form, "depart_id": depart_id})class DepartmentList(ListView): model = Department template_name = 'department/index.html' paginate_by = 5 def get_queryset(self, *args, **kwargs): name = self.request.GET.get('name', '') if name != '': return Department.objects.filter(name=name) .order_by('-createDate') else: return Department.objects.all().order_by('-createDate') def get_context_data(self, **kwargs): name = self.request.GET.get('name', '') context = super().get_context_data(**kwargs) context['name'] = name return context# 删除数据def delete(request, depart_id): department = get_object_or_404(Department, pk=depart_id) department.delete() return redirect('/department/')# 详细信息def detail(request, depart_id): department = get_object_or_404(Department, pk=depart_id) return render(request, 'department/detail.html', {'department': department})

为了方便咱们实现视图和表单相关的功能,Django框架真可谓煞费苦心,特意准备了ListView、CreateView、UpdateView、DeleteView、DetailView等封装类。有类实现方式,有函数实现方式,怎么实现方便就怎么来,你喜欢就好。

10.3 urls配置

有关urls.py的完整内容秀出来一下,方便你使用。注意其中对类(DepartmentList)的配置方式,它的结尾是用as_view()的,别搞错了。

from django.urls import pathfrom . import viewsapp_name = 'department'urlpatterns = [ path('', views.DepartmentList.as_view(), name='index'), path('create/', views.create, name='create'), path('delete/<int:depart_id>/', views.delete, name='delete'), path('update/<int:depart_id>/', views.update, name='update'), path('detail/<int:depart_id>/', views.detail, name='detail'),]

在浏览器输入http://127.0.0.1:8000/department/create/的访问结果。

第10天|Django3.0项目实战,部门管理系统的表单升级(django进度管理系统)

好了,有关部门管理系统的表单升级的内容,老陈讲完了,如果觉得对你有所帮助,希望你能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我在分享Python,前端、Java和App方面的干货。关注我,没错的。

#Python##Django##程序员##Web##项目实战#

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年7月1日 上午10:34
下一篇 2022年7月1日 上午10:36

相关推荐

  • 如何找到管理系统的项目

    如何找到管理系统的项目? 随着现代企业规模的不断扩大,管理系统的需求也变得越来越多样化。对于许多企业而言,找到适合他们的管理系统项目是至关重要的。本文将介绍一些找到管理系统项目的方…

    科研百科 2024年12月30日
    0
  • 经济学科研项目有哪些

    经济学科研项目有哪些 随着现代经济的不断发展,经济学科研项目也在不断增加。这些项目旨在探索经济现象的本质,并为消费者提供更好的决策支持。以下是一些目前较为热门的经济学科研项目: 1…

    科研百科 2025年5月31日
    0
  • 外卖管理系统项目开发

    外卖管理系统项目开发 随着现代都市生活的快节奏,越来越多的消费者开始选择通过外卖平台购买食品和饮料。外卖管理系统是实现这一需求的关键,它可以帮助餐厅管理订单、库存、配送和客服等方面…

    科研百科 2024年12月12日
    1
  • 国企如何把握混改创新模式?德龙-渤钢混改的案例值得学习(德龙集团重组渤海钢铁)

    当前中国发展混合所有制经济将给国企注入新的动力,成为新一轮国企发展的最大动力。德龙集团董事长丁立国在2019岭南论坛进行了案例的分享。 德龙-渤钢混改的背景:原国企渤海钢铁集团有限…

    科研百科 2023年12月11日
    157
  • 科研项目必要性

    科研项目必要性 科研项目是推动科学进步和发展的重要力量。科研项目的必要性可以从以下几个方面阐述: 1. 推动科学技术进步 科研项目是科学家进行研究和探索的重要场所。通过科研项目,科…

    科研百科 2024年11月19日
    7
  • 软件开发的费用

    在软件开发过程中,费用是一个不可忽视的因素。无论是企业还是个人,都需要在软件开发上投入一定的费用。本文将探讨软件开发的费用构成、影响因素以及如何合理控制费用。 首先,软件开发的费用…

    科研百科 2023年7月23日
    125
  • 贵州省教育厅制定出台巩固教育脱贫攻坚成果推进乡村振兴2022年工作要点

      为持续深入推进全省巩固拓展脱贫攻坚教育保障成果同乡村振兴有效衔接有关工作,现制定《省教育厅巩固教育脱贫攻坚成果推进乡村振兴2022年工作要点》如下。   一、总体要求   坚持…

    2022年6月12日
    275
  • 绿巨人黑科技app

    绿巨人黑科技app: 领略科技之美 随着科技的不断发展,人们对于科技的应用也越来越高明了。其中,黑科技这个词也成为了人们经常使用的词汇。而今天,我要向大家介绍一款名为“绿巨人黑科技…

    科研百科 2024年10月4日
    144
  • 如何高效项目管理

    如何高效项目管理 项目管理是当今企业和组织中不可或缺的一部分。一个好的项目管理能够帮助企业有效地组织资源,提高生产效率,降低风险,并确保项目按时完成。但是,对于许多人来说,如何高效…

    科研百科 2024年5月26日
    101
  • 提高规矩意识 强化内控机制(提高规矩意识 强化内控机制的措施)

    ◎ 吴有霞 摘要 地勘单位改革期间,内部控制建设是至关重要的一项工作,也是地勘单位重组合并打好基础的关键一环。目前,地勘单位普遍存在对内控建设不重视、体制改革不完全、职责划分不明确…

    科研百科 2024年5月12日
    87