十七. 增加一个项目协作留言板功能(三)----- 增加任务的修改和删除功能



任务的修改功能主要是进入任务内部,进行实施步骤的添加功能,并对一些内容进行更改,例如,联系人方式等。

 

1.通过views.py建立编辑任务函数:

#任务的编辑
def task_edit(request, pk):
    #获取相关任务实例
    task_ins = get_object_or_404(Task, pk=pk)
    #如果收到了相应的POST提交
    if request.method == 'POST':
        #任务联系人为可编辑选项,并填充原先的任务联系人
        task_ins.task_contacts = request.POST['task_contacts']
        task_ins.save()

        #通过所在task_id获取task对象
        process_task = Task.objects.get(id = task_ins.id)
        #如果获取的实施步骤内容不为空,建立process对象,并增加相关信息
        if request.POST['process_content'].strip(' ') != '':
            process_ins = Process()
            process_ins.task = process_task
            process_ins.process_content = request.POST['process_content'].strip(' ')
            process_ins.process_signer = request.user
            process_ins.save()

        return redirect('task_edit', pk=task_ins.id)

    context = {
        'task': task_ins,
        'user': str(request.user),
        'sub_title': '编辑任务',
    }
    return render(request, 'task_edit.html', context)


2.建立task_edit.html:

{% extends "index.html" %}
{% load crispy_forms_tags %}
{% load static %}
{% block page_title %}
    任务处理
{% endblock %}
{% block container %}
    <div class="row">
    <div class="col-sm-12 pull-left">
        <!---任务基础信息 BEGIN--->
    <!----需要提交的内容,放于form中---->
    <div class="col-sm-4 pull-left">

      <div id="div_id_task_title" class="form-group">
           <label for="id_task_title" class="control-label"><strong>任务名称</strong></label>
           <div class="controls">
            <label for="id_task_title" class="control-label">{{ task.task_title }}</label>
               <label for="id_task_category" class="control-label">[</label>
               {{ task.task_category }}<label>]</label>
            </div>
        </div>
    <form method='POST' action='{% url 'task_edit' pk=task.id %}'>{% csrf_token %}

        <div id="div_id_task_contacts" class="form-group">
            <label for="id_task_contacts" class="control-label"><strong>联系人员</strong></label>
            <div class="controls ">
             <textarea class="textarea form-control"  id="id_task_contacts" name="task_contacts" rows="2" {% if task.task_status == '已结单' %}readonly="readonly"{% endif %}/>{{ task.task_contacts }}</textarea>
             </div> </div>

        <div id="div_id_task_member" class="form-group">
            <label for="id_task_member" class="control-label  requiredField"><strong>实施人员</strong></label>
            <div class="controls "> <input class="textinput textInput form-control" id="id_task_member" maxlength="255" name="task_member" type="text" value="{% for member in task.task_member.all %}{{ member }}  {% endfor %} " readonly/> </div> </div>
        <!---任务基础信息 END--->
    <!--如果任务的状态是处理中,那么以下按钮正常出现,如果是其他状态,那么这些按钮不出现-->
        <br/><br/>
     {% if task.task_status == '处理中' %}
         <!-- 新增处理过程 BEGINS -->
            <label for="id_process_content" class="control-label">
                新增处理过程 </label>

            <div class="controls ">
                <textarea class="textarea form-control"  id="id_process_content" name="process_content" rows="10">
            </textarea>
            </div>
     <!--如果在处理中,那么显示'提交'及'取消'按钮--->
        <input class='btn btn-primary' type='submit' value='提交' />
        <a href="{% url 'task_list' %}">
     <input class='btn btn-default' type='button' value='取消' /></a>

    {% else %}
    <!--如果任务已经结束,那么仅显示'返回'按钮--->
        <a href="{% url 'task_list' %}">
     <input class='btn btn-default' type='button' value='返回' /></a>

    {% endif %}
    </form></div>

    </div>

    </div>
    {% include 'modal.html' %}

{% endblock %}
{% block page_javascript %}
    {% include 'modal_js.html' %}
{% endblock %}

3.增加一条记录,并进入修改页面查看结果:增加一条任务记录

点击修改,进入修改内容


4.增加任务的删除功能,参照之前的方式,通过modal方式进行删除。首先,views.py中增加相应的删除功能。


Views.py:

#任务列表的任务删除
def task_delete(request, pk):
    #获取选定的task实例
    task_ins = get_object_or_404(Task, pk=pk)
    #如果接收到了删除的POST提交,则删除相应条目
    if request.method == 'POST':
        try:
            task_ins.delete()
            #删除成功,则data信息为success
            data = 'success'
        except IntegrityError:
            #如因外键问题,或其他问题,删除失败,则报error
            data = 'error'
        #将最后的data值传递至JS页面,进行后续处理,safe是将对象序列化,否则会报TypeError错误
        return JsonResponse(data, safe=False)


5.尝试将创建记录删除


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章