2016-03-07 166 views
1

我正在使用Boostrap模式淡化窗口呈现Django窗体来更新我的数据库记录。而且,如果用户打开了“更新”窗口并且没有更改任何内容,我无法重新加载页面。这将是更容易,如果你看一下下面的代码,让我的想法: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

不,我不这么认为。一旦'request'发送给Django,它就必须返回一个'response'。你可以在按钮上点击一些AJAX来做到这一点。编写一个AJAX方法来检查当前表单数据是否与保存的数据不同。只有这样,才能提交完整的表格。 –

+0

@DanRussell,你能否提供这个JQuery-Ajax函数结构的最短样本,以回答这个问题?我对Ajax几乎没有经验,尽管我知道这个理论,但我不知道在实践中这应该如何。即使朝正确的方向踢球,我也会感激 –

回答

1

这不是小事,但你需要的基本步骤是:

  1. 写一些JavaScript篡夺形式提交按钮点击
  2. 通话将数据发送你的Ajax功能,以“检查”视图
  3. 写“检查”的观点,如果表单数据已经改变
  4. 如果数据已经改变,将检查,提交表单
  5. 如果没有,只是停留页

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
相关问题