任务的修改功能主要是进入任务内部,进行实施步骤的添加功能,并对一些内容进行更改,例如,联系人方式等。
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.尝试将创建记录删除