Django - 如何在没有刷新页面的情况下保持同一页面?

时间:2016-03-07 11:35:47

标签: django

我正在使用Boostrap模态淡入淡出窗口,它使Django表单更新我的数据库记录。而我未能做的就是如果用户打开了更新窗口并且没有更改任何内容,则不会重新加载页面。如果你看下面的代码,我会更容易理解:

def updateTask(request, task_id):
    #cur_usr_sale_point = PersonUnique.objects.filter(employees__employeeuser__auth_user = request.user.id).values_list('agreementemployees__agreement_unique__sale_point_id',flat=True)
    selected_task = Tasks.objects.get(id=task_id)    
    task_form = TaskForm(instance=selected_task )
    taskTable = Tasks.objects.all()
    if request.method == 'POST':
        task_form = TaskForm(request.POST,instance=selected_task)
        if task_form.has_changed():
            if task_form.is_valid():
                # inside your model instance add each field with the wanted value for it
                task_form.save();
                return HttpResponseRedirect('/task_list/')   
        else: # The user did not change any data but I still tell Django to                 
              #reload my page, thus wasting my time.
             return HttpResponseRedirect('/task_list/') 
    return render_to_response('task_management/task_list.html',{'createTask_form':task_form, 'task_id': task_id, 'taskTable': taskTable},context_instance=RequestContext(request))

问题是,有没有办法告诉Django更改url(就像它重定向后发生的那样)但是不是第二次加载相同数据的同一页面?

1 个答案:

答案 0 :(得分:1)

这不是一件轻而易举的事,但您需要的基本步骤是:

  1. 写一些javascript来篡改表单提交按钮点击
  2. 调用您的ajax函数,该函数将数据发送到"检查"图
  3. 写一个"检查"将检查表单数据是否已更改的视图
  4. 如果数据已更改,请提交表单
  5. 如果没有,请留在页面
  6. This blog post是整个过程的一个很好的演练(尽管针对不同的最终结果,您需要修改视图)。

    以下是一些有助于完成上述步骤的SO答案:

    1. 基本上:

      $('#your-form-id').on('submit', function(event){
          event.preventDefault();
          your_ajax_function();
      });
      
    2. Call ajax function on form submit

    3. 要自己做!
    4. Submit form after checking