2016-03-07 61 views
1

我試圖用Django驗證一個簡單的表單,它似乎總是返回false。我通過AJAX將表單的值發送到views.py,並在Javascript和view.py中打印值以確保其正確傳遞。Django is_valid()返回false

的意見文件:

def change_alphabet(request): 

cipher = CaesarCipher() 
x = cipher.getListLetter() 
y = cipher.getListLetter() 
if request.is_ajax() and request.method == "GET": 
    print("Inside CHANGE") 
    formKey = caesarKey(request.GET or None) 

    print("Valid or not: %r " % formKey.is_valid()) 
    integerKey = int(request.GET.get('the_key')) 
    print(integerKey) 


    if formKey.is_valid(): 
     print(request.GET.get('the_key')) 
     integerKey = int(request.GET.get('the_key')) 

     y = cipher.setCipherLetters(integerKey) 

     context = { 'x': x, 
        'y': y, 
        'formKey': formKey, 

     } 

     return render(request, "content/alteredAlphabet.html", context) 
    else: 
     print(formKey.errors) 
     context = { 'x': x, 
        'y': y, 
        'formKey': formKey, 

     } 

     return render(request, "content/alteredAlphabet.html", context) 

形式:

class caesarKey(forms.Form): 
key = forms.DecimalField(max_value = 26, min_value = 1, initial = 1, required = True, error_messages={'required' : 'Please input a valid key number!'}, widget=forms.NumberInput(attrs={'class' : 'form-control', 'placeholder' : 'Key'})) 

的JavaScript:

$("#keyButtonId").on({ 
click: function() { 
    var variable = document.getElementById('id_key'); 
    console.log(variable.value) 
    $.ajax({ 
    url: "/alteredAlphabet", 
    type: "GET", 
    data: { 
     CSRF: 'csrf_token', 
     the_key: $('#id_key').val() 
    }, 

    success: function(json) { 
     // $('#id_key').val('0'); 
     // console.log(json); 
     $('#letterSection').fadeOut('slow', function() { 
     $('#letterSection').html(json); 
     $('#letterSection').fadeIn(3000); 
     }); 


     //document.getElementById('letterSection').value = json; 
     console.log("FUNCTION CALLED!"); 
    } 
    }); 
} 

});

被印刷的錯誤是:

<ul class="errorlist"><li>key<ul class="errorlist"><li>Please input a valid key number!</li></ul></li></ul> 

UPDATE:

<label for="id_key"> 
       Key: 
       </label> 
       <form onsubmit="return false;" method="GET" id="key-form"> 
       {% csrf_token %} 
       <div class="col-sm-2 col-xs-5"> 
        {{ formKey.key }} 
       </div> 
       <button name="action" id="keyButtonId" class="btn btn-primary" value="key">Key</button> 
       </form> 
       {% if formKey.errors %} 
          <div class="alert alert-danger" role="alert"> 
           <strong>{{ formKey.key.errors }}</strong> 
          </div> 
       {% endif %} 

爲什麼總是返回false:

渲染表單模板代碼?我是否錯過了限制數據的額外階段?

+0

你是如何渲染表單?什麼是html? –

+0

通過渲染,你的意思是模板?或者在使用render() – Silvestrini

+0

的意見中,我的意思是模板。發佈您的代碼模板。 –

回答

2

您將關鍵數據作爲the_key傳遞給Ajax,但表單只需要key

相關問題