2016-04-28 53 views
0

我覺得這可能是簡單的東西,我很想念,但由於發佈數據來自我的角度JavaScript的AJAX調用,我不能太確定。簡而言之,我從request.body中的AJAX調用中獲取數據,我有一個函數來處理它,並將其轉換爲查詢字典以綁定到我的表單。它一直在努力,直到這一點。該表單根據form.is_valid有效,並且我可以看到數據正在發佈,但它的clean_data屬性中沒有任何內容。窗體綁定,但沒有在清潔數據

def requestPost(request): 
    querystring = urllib.urlencode(ast.literal_eval(request.body)) 
    postdata = QueryDict(query_string=querystring) 

    return postdata 

def send(request, thread_id): 
    # """Send a message to the thread.""" 

    account = Account.objects.get(email=request.user.username) 
    thread = Thread.objects.get(id=thread_id) 

    if request.method == "POST": 
     x = requestPost(request) 
     form = NewChat(requestPost(request)) 

     if form.is_valid(): 
      cleaned_data = form.cleaned_data 
      threadchat = ThreadChat.objects.create(text=cleaned_data['message'], account=account, thread=thread) 

      broadcast(threadchat.id) 

      context = {"threadchat": threadchat} 
      return composeJsonResponse(200, "", context) 

enter image description here

class NewChat(forms.Form): 
    message = forms.Textarea() 
+0

requestPost函數有什麼意義?你爲什麼不直接訪問request.POST? –

+0

由於發佈的數據來自於AJAX調用的角度,因此數據以字符串的形式通過請求的主體屬性傳遞。所以我必須處理字符串,並將其轉換爲QueryDict – JBT

回答

1

forms.Textarea不是一個領域,它是一個小部件。您的表單中沒有實際字段,因此cleaned_data爲空。

您應該在您的表單中使用forms.CharField;如果你需要它顯示爲textarea,你可以通過它作爲widget的參數:

class NewChat(forms.Form): 
    message = forms.CharField(widget=forms.Textarea()) 
+0

真棒,它的工作。總是讓我出來丹尼爾,謝謝! – JBT