2016-03-07 96 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