热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

十六.增加一个项目协作留言板功能(二)-----建立一个任务管理的列表页面

我们设计一个页面来展示正在处理的任务,该表格可以参照之前基础信息的增删改查。用户通过这个页面对任务进行相应操作。1.在views.




我们设计一个页面来展示正在处理的任务,该表格可以参照之前基础信息的增删改查。用户通过这个页面对任务进行相应操作。

 

1.在views.py中建立task表的增删改查功能,并增加搜索功能。由于任务列表中,涉及到了实施步骤和任务列表,为了使搜索更加强大,我们希望能够直接通过实施步骤的内容搜索到相关的任务

views.py:


from .models import Node,Line,Device,Task
#任务的列表显示
def task_list(request):
    #如果通过GET来获取了相应参数,那么进行查询
    if request.method == 'GET':
        #建立过滤条件的键值对
        kwargs = {}
        #默认显示处理中的任务
        kwargs['task_status'] = '处理中'
        #用于分页显示的query
        query = ''
        for key, value in request.GET.iteritems():
            #除去token及page的参数
            if key != 'csrfmiddlewaretoken' and key != 'page':
                #如果查询的是与处理过程相关的,那么需要通过外键跳转至process表格
                if key == 'process_content':
                    if value !='':
                        kwargs['process__process_content__contains'] = value
                elif key == 'process_signer':
                    if value !='':
                        kwargs['process__process_signer__contains'] = value
                #定义任务的开始与结束时间
                elif key == 'task_start':
                    if value != '':
                        kwargs['task_signtime__gte'] = value
                elif key == 'task_end':
                    if value != '':
                        kwargs['task_signtime__lte'] = value
                #定义任务的状态
                elif key == 'task_status':
                    if value == U'处理中':
                        kwargs['task_status'] = '处理中'
                    if value == U'已结单':
                        kwargs['task_status'] = '已结单'
                    #如果选择了所有状态,即对任务状态不进行过滤,那么就删除task_status这个键值对
                    if value == U'全部':
                        del kwargs['task_status']
                #其余的则根据提交过来的键值对进行过滤
                else:
                    kwargs[key + '__contains'] = value
                #建立用于分页的query
                query += '&' + key + '=' + value
        #按照登记时间排序
        data = Task.objects.filter(**kwargs).order_by('task_signtime')


    #如果没有GET提交过来的搜索条件,那么默认按照登记时间排序,并只显示处理中的任务
    else:
        data = Task.objects.filter(task_status='处理中').order_by('task_signtime')

2. 建立任务列表的增加功能


通过forms.py建立一个form表单,但是不通过modelform来建立,同时表单采用普通的HTML方式写成,不采用之前的djangoform形式。

Forms.py:

#定义TaskForm,但不根据ModelForm来定义
from django import forms

class TaskForm(forms.Form):
    #任务类型的分类
    category = (
        (U'综合事务','综合事务'),
        (U'机构建设','机构建设'),
        (U'线路事务','线路事务'),
    )
    task_title = forms.CharField(label = '任务名称',max_length = 255)
    task_category = forms.ChoiceField(label='任务分类',choices= category)
    #建立联系人,其中的textarea做了规格设定,默认行高为2
    task_cOntacts= forms.CharField(label = '联系人',widget=forms.Textarea(attrs={'rows': '2'}),required=False)
    #建立一个复选框的实施人员,通过queryset来获取人员列表
    task_member = forms.ModelMultipleChoiceField(label='实施人员',
                                                 queryset=Employee.objects.all(),
                                                 widget=forms.CheckboxSelectMultiple)
    #建立一个处理过程
    process_cOntent= forms.CharField(label = '处理过程',widget=forms.Textarea)


Views.py:

from forms import NodeForm,LineForm,DeviceForm,TaskForm
import time
#任务列表的增加
def task_add(request):
    #从TaskForm获取相关信息
    form = TaskForm(request.POST or None)
    if form.is_valid():
        #建立一个task实例
        task_ins = Task()
        #通过时间来建立一个任务流水
        task_ins.task_code = str(int(time.time()))
        #获取task的相关信息
        task_ins.task_title = form.cleaned_data.get('task_title')
        task_ins.task_category = form.cleaned_data.get('task_category')
        task_ins.task_cOntacts= form.cleaned_data.get('task_contacts')
        #task建立后默认变成处理中的状态
        task_ins.task_status = '处理中'
        #通过登录用户来辨别任务登记人
        task_ins.task_signer = request.user
        #保存task实例
        task_ins.save()
        #通过当前task_id获取task对象,并将其赋给member_task
        member_task = Task.objects.get(id = task_ins.id)
        #获取members集合
        members = form.cleaned_data.get('task_member')
        #获取members集合中的member,并将其添加到member_task中,增添相应实施人员
        for member in members:
            member_task.task_member.add(member)

        #通过task_id获取task对象
        process_task = Task.objects.get(id = task_ins.id)
        #建立一个process的实施步骤实例
        process_ins = Process()
        #将process实例与task绑定
        process_ins.task = process_task
        #获取process相关信息
        process_ins.process_cOntent= form.cleaned_data.get('process_content')
        process_ins.process_signer = request.user
        process_ins.save()
        return redirect('task_list')

    cOntext= {
        'form': form,
        'sub_title': '新建任务',
    }
    return render(request, 'task_add.html',  context)

def task_edit(request,pk):
	pass
def task_delete(request,pk):
    	pass




3.修改index.html,将其中的Typography更改成任务管理模块,同时增加相应的指向至urls.py


Index.html:


对以下页面进行更改:


  • Typography
  • 更改成以下页面:


  • 任务列表

  • 4.修改urls.py:

    #任务列表
    url(r'^task_list/', echo.views.task_list, name='task_list'),
    url(r'^task_add/', echo.views.task_add, name='task_add'),
    url(r'^task_edit/(?P\d+)/$', echo.views.task_edit, name='task_edit'),
    url(r'^task_delete/(?P\d+)/$', echo.views.task_delete, name='task_delete'),
    

    5.建立任务列表页面,其中搜索项包含以下选项:


    名称

    Name

    任务流水

    Task_code

    任务名称

    Task_title

    创建人员

    Task_signer

    联系人员

    Task_contacts

    任务内容

    Process_content

    任务分类

    Task_category

    任务状态

    Task_status

    创建日期

    Task_start / task_end


    Task_list.html:

    {%  extends "index.html" %}
    {% block page_css %}
    {% endblock %}
    {% block page_title %}
        任务信息
    {% endblock %}
    
    {% block container %}
    {% load staticfiles %}
    
    
    
    {% csrf_token %}
    任务流水
    任务名称
    创建人员
    联系人员
    任务内容
    任务分类
    任务状态
    创建日期
    {{ result }}
    {% for item in data %} {% if item.task_status == '处理中' %}{% endif %} {% if item.task_status == '已结单' %}{% endif %} {% endfor %}
    流水号 任务名称 任务分类 任务状态 创建人 创建时间 新建任务
    {{ item.task_code }} {{ item.task_title }} {{ item.task_category }}处理中已结单{{ item.task_signer }} {{ item.task_signtime }}
    {% include 'modal.html' %} {% include 'pagination.html' %}
    {% endblock %} {% block page_Javascript %} {% include 'modal_js.html' %} {% endblock %}


    6.新增添加任务页面:

    Task_add.html:

    {% extends "index.html" %}
    {% load crispy_forms_tags %}
    {% block page_title %}
        任务处理
    {% endblock %}
    {% block container %}
        
    {% csrf_token %} {{ form | crispy}}
    {% endblock %}

    7.在django后台admin新增Employee的模型,并新建若干useremployee用户:

    Admin.py:

    from .models import Node, Line, Device, Employee
    admin.site.register(Employee)
    

    建立相关user用户:



    并基于user,建立employee用户:




    8.验证任务列表页面



    9. 验证新增任务页面




    推荐阅读
    • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
    • CSS3选择器的使用方法详解,提高Web开发效率和精准度
      本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
    • CF:3D City Model(小思维)问题解析和代码实现
      本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
    • VScode格式化文档换行或不换行的设置方法
      本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
    • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
    • Nginx使用(server参数配置)
      本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
    • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
    • 如何使用Java获取服务器硬件信息和磁盘负载率
      本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
    • baresip android编译、运行教程1语音通话
      本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
    • 计算机存储系统的层次结构及其优势
      本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
    • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
    • 高质量SQL书写的30条建议
      本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
    • PHPMailer邮件类邮件发送功能的使用教学及注意事项
      本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
    • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
    • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
    author-avatar
    霙昉蘖976
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有