2017-07-04 19 views
0

検索で私の問題の解決策を見つけることができませんでした。だから私は自分のコードに何が間違っているのか尋ねたい。 forms.ModelFormからフォームを検証しようとしていますが、私のビューの機能ではform.is_valid()を渡しません。ajax投稿付きの単一フィールドでフォームを検証できません

<li>title<ul class="errorlist"><li>This field is required.</li></ul> 

モデル::印刷form.errorsは私与え

class Paper(models.Model): 
    title = models.CharField(max_length=100, help_text='Hello World!') 

forms.FormModel

class eventCreateForm(forms.ModelForm): 

    class Meta: 
     Model = Paper 
     fields = ['title'] 

     widgets = {    
      'title': forms.TextInput(attrs={'class' :'form-control', 'placeholder' : 'Place title'}),   
     } 

ビュー

def create_paper(request): 

    context = {}    

    if request.method == 'POST': 
     form = paperCreateForm(request.POST or None, request.FILES or None) 

     if form.is_valid():    

      form_data = form.cleaned_data     
      t1 = form_data['title']  
      print(t1) 

     else: 

      context['create_paper_form'] = form 

    form_template = "user/paper-event-template.html" 

    return HttpResponse(render_to_string(form_template, {'context' : context}))  

フォームを検証しますdosen't、およびelse節では、エラーwheを渡しますnはcleaned_data

からそれを取得しようとすると、私が試してみて、フォームを印刷し、それは示していなかった:

<tr><th><label for="id_title">Title:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input class="form-control" id="id_title" maxlength="100" name="title" placeholder="Place Title" type="text" required /></td></tr> 

しかし、それは、私はそれが必要がありますねこれは、任意の値が含まれていdosen't:私はJAXを使用しますフォームデータを送信するための方法:

アヤックス

$('#create_paper_form_id').submit(function (event) { 
     event.preventDefault(); 

     $.ajax({ 
      type: "POST", 
      url: "{% url 'Eapp:create_paper' %}", 
      data: { 
       csrfmiddlewaretoken : '{{ csrf_token }}', 
       form_data : $('#create_paper_form_id').serializeArray(), 

       }, 
      success: function (data) { 
       console.log(data); 
       $('.create-paper').html(data); 
      }, 
      error: function() { 
       console.log('err'); 
      } 
     }); 
    }); 

HTML

<div class="create-paper"> 
    <div class="container-fluid"> 
     <form class="form" id="create_paper_form_id" novalidate="novalidate" action="{% url 'Eapp:create_event' %}" method="POST">   
      {% for field in create_paper_form %} 
      <div class="form-group"> 
       <div class="col-xs-12"> 
        {{ field.label_tag }} 
       </div> 
       <div class="col-xs-12"> 
        {{ field }} 
       </div> 
       <div class="col-xs-6"> 
        {{ field.help_text }} 
       </div>    
       <div class="col-xs-6"> 
        {{ field.errors }} 
       </div> 
      </div> 
      {% endfor %}  
      <div class="form-group"> 
       <div class="col-xs-6 col-sm-6 col-md-2 col-lg-2"> 
        <button type="submit" class="btn btn-primary">Submit</button> 
       </div> 
      </div> 
     </form> 
    </div> 
</div> 
+1

私はあなたのelse節で何をしようとしているのか分かりません。 –

+0

@DanielRoseman何が間違っているかについての情報を得ようとしています。 – vandelay

+1

次に、 'form.errors'を出力してください。 –

答えて

3

これは正常な動作です。cleaned_dataは、実際にクリーンアップされたデータが利用可能な場合にのみ、有効なフォームで利用できます。

form.dataでも利用できますが、それを使用することはできます。

フォームインスタンスがすべてのそのフィールドの検証 ルーチンを実行IS_VALID()メソッドを持っています。manualを引用する

。このメソッドが呼び出されると、すべてのフィールド は、有効なデータが含まれている場合、それは以下となります。

  • リターン真
  • 場所そのcleaned_data属性で、フォームのデータ。

[編集] @のファズル・ザイドが述べたように、あなたはそれがmodelformとして機能するためにあなたのMetaクラスでmodelを含める必要があります。

+0

申し訳ありませんが、それはタイプミスでした。投稿データを送信するための私のajaxメソッドとは関係があると思います。だから私はポストを更新しました。しかし、助けてくれてありがとう。 – vandelay

関連する問題