2015-08-26 24 views
0

我有Django模板:home.html的頁面:刪除對象使用Ajax在Django不工作

<a href="#" class = "dept" contextmenu = "mymenu2" id = "{{d.dept.id}}" ><i class="fa fa-circle-o"></i> {{d.dept}} <i class="fa fa-angle-left pull-right"></i></a> 

<ul class='custom-menu2'> 
    <p><a id = "add_emp">Add new Employee</a></p> <br> 

    <p><a class = "del_dept">Delete this Deptartment</a></p> 

</ul> 

<script> 
var id; 

    $('.dept').mousedown(function(event) { 
    switch (event.which) { 
    case 3: 
     id = $(this).attr('id'); 


     $('.del_dept').on('click',function(e){ 

      if(e.handled !== true) 
      { 
      alert(id); 
       $.ajax({ 
        type: "POST", 
        url: "del_dept", 
        data: { 'id':id }, 
        success: function(response){ 
        alert(response.success); 
      } 
      }); 
       return false; 
      e.handled = true; 
      }     
     });   

     break; 
} 
}); 

</script> 

views.py:

def del_dept(request): 
    department = Department.objects.get(pk = int(request.REQUEST['id'])) 
    print department 
    print ("ABCD") 
    department.delete() 
    payload = {'success': True} 
    return HttpResponse(json.dumps(payload), content_type='application/json') 

主要urls.py:

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^employee/', include('EmployeeManagement.urls')), 
    ) 

和EmployeeManagement.urls文件:

urlpatterns = [ 
    # ex: /polls/ 
    url(r'^$', views.home, name='home'), 
    url(r'^(?P<emp_id>[-\w]+)/$', views.get_employee,  name='get_employee'), 
    url(r'^(?P<emp_id>[-\w]+)/(?P<status>[-\w]+)/$', views.change_status, name='change_status'), 
    url(r'save_dept$',views.save_dept, name = 'save_dept'), 
    url(r'save_emp$',views.save_emp, name = 'save_emp'), 
    url(r'del_dept$',views.del_dept, name = 'del_dept'), 

]

不知道什麼是錯,Apprantly,當我點擊「刪除此部」按鈕,在特定部門的警報,但沒有任何反應後的ID。同樣在del_dept查看,我試圖打印部門和只是一些文本進行測試,但他們都沒有打印。

回答

1

你的AJAX的網址是不是一個有效的URL

$.ajax({ 
     type: "POST", 
     url: "{% url 'del_dept' %}", 
     data: { 'id':id }, 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}"); 
     }, 
     success: function(response){ 
     alert(response.success); 
     } 
     }); 

注意我已經改變del_dept使用Django的網址模板標籤。你可能需要在這裏包含一個命名空間,但它看起來不像你所做的那樣

對於發佈請求,你還需要包含一個csrf token

此外,您的觀點是找錯了地方的ID,後期數據進入request.POST讓你的查詢就會變成

department = Department.objects.get(pk=int(request.POST['id'])) 

你可能並不需要,因爲它可能投下ID爲int已經是一個。

+1

此外,雖然不是你的問題的一部分,我會建議使用[登錄所需的裝飾器](https://docs.djangoproject.com/en/1.8/topics/auth/default/#the-login-required-裝飾器)或其他裝飾器,以便用戶必須至少登錄才能開始從數據庫中刪除東西 – Sayse

+0

它正在進入該del_dept視圖,但仍未打印「ABCD」和部門名稱。加上仍然沒有任何反應後,它提醒編號 –

+0

@MirzaTaimoorBaig - 對不起,錯過了那一點,更新我的答案,你正在尋找錯誤的請求字典 – Sayse