2014-12-03 80 views
0

我有一個形式簡單的輸入框,其中我試圖通過發送Ajax的帖子Django的價值,但我得到一個500錯誤ValueError at /rest/ Cannot use None as a query value爲什麼ajax請求爲dom元素的值提交'none'?

<form onsubmit="return false;"> 
{% csrf_token %} 
    Search:<input type="text" name="artist" id="artist" /> 
    <button class="updateButton" onclick="createlist()">submit</button> 
</form> 

<script> 

function createlist(){ 
$.ajax({ 
    type: "POST", 
    url: "/rest/", 
    dataType: "json", 
    data: { 
     csrfmiddlewaretoken: "{{ csrf_token }}", 
     artist: $('#artist').val() 
    }, 
    success: function(data){ 
     $('body').append(data.results); 
    } 
}); 
} 
</script> 

查看:

def rest(request): 

    artistname = request.POST.get("artist") # <- problem here? 
    response_data = {} 

    query_results = Art.objects.filter(artist__contains=artistname) 
    response_data['results'] = query_results 
    return HttpResponse(json.dumps(response_data), content_type="application/json") 

當我檢查Form Data下的標題時,它顯示artist: da vinci這是我輸入的內容。列車在哪裏脫軌?

+1

試過這個'request.POST.get(「artist」,「」)'? – 2014-12-03 07:07:20

+0

是的。問題似乎是我將json發送到Django視圖。所以django看到'{「csrfmiddlewaretoken」:「token」,「artist」:「da vinci」}' – 2014-12-03 07:10:15

+0

其實我不知道問題是什麼。 – 2014-12-03 07:20:38

回答

0

我想出了問題所在。我的app/urls.py文件正在將url發送給錯誤的函數。我認爲/rest/網址是去views.rest函數,但由於某種原因/rest/正在發送到views.get_search_entry,這與post請求完全不同。

from django.conf.urls import patterns, url 
from myapp import views 

urlpatterns = patterns('', 
    url(r'^$', views.get_search_entry, name='get_search_entry'), 
    url(r'^results/', views.get_search_entry, name='result'), 
    url(r'^rest/', views.rest, name='rest'), 
) 

然後,我不得不序列化queryset之前轉儲到json發送通過電線。

2

複製,粘貼你的代碼併爲我工作。

您可以嘗試改變發送POST請求的方式。

$.ajax({ 
    type: "POST", 
    url: "/rest/", 
    dataType: "json", 
    data: {artist: $('#artist').val() }, 
    headers: { 
    'X-CSRFTOKEN': "{{ csrf_token }}", 
    }, 
    success: function(data){ 
    $('body').append(data.results); 
    } 
});