2017-07-29 1 views
0

djangoでエラーが発生したフォームを送信すると、フォームのすべてのフィールドが消去されます。フィールドに情報を保存したいのは、ユーザーがデータを送信しているときに役立つからです。djangoでエラーが発生したフォームを提出した後、フィールドのデータを保持

これはaplicationの私のviews.pyです:

def new(request): 
    context = {} 
    if request.method == 'POST': 
     form = NewSubject(request.POST) 
     if form.is_valid(): 
      context['is_valid'] = True 
      form.save() 
      form = NewSubject() 
     else: 
      context['is_valid'] = False 
    else: 
     form = NewSubject() 

    context['form'] = form 
    return render(request, 'subjects/new.html', context) 
+0

サーバー側に送信する前に、クライアント側でJavaScriptを使用して検証する方が良いかもしれません。 – AK47

+0

フォームで有効でないフォームデータが削除されていない場合は、テンプレート上にある可能性があります。 –

+0

AK45では、まだJavaScriptを使って検証を試みていませんが、サーバー上でこれを行うことができればもっと興味深いでしょう。 ベアブラウン、私はテンプレートをいくつか修正しました。私はオリジナルのDjangoフォームを使用していませんが、独自のフォームを使用したパーソナライズされたフォームを使用しています。 –

答えて

0

同様ベアブラウンは、データがエラーした後、フィールドに保つが、どのように私はジャンゴから純粋な形態を使用していなかった、私はいくつかの調整を行う必要があると述べました。 オリジナルのDjangoフォームで隠しdivを作成し、JavaScriptを使用して自分のフィールドのデータを渡しました。 これは私がどのように進めるの例である:

元Djangoのフォームは、フォーム上のフィールド名に基づいてIDを持っています。あなたは「名前」のようなforms.pyにフィールドの名前を定義するのであれば、フィールドのIDは「id_name」になります。

function error(){ document.getElementById('name').value = document.getElementById('id_name').value;} 

これは、フォーム上のフィールドが呼ばれる方法であります。それがレンダリングされた後、フォームフィールドのデータが格納され、idを持つので、id( "id_name")で要素を取得し、私のpersonalizatedフィールドの情報を転送します。

<div style="display: none;"> 
    {{ form.name }} 
</div> 

これは、ユーザーがデータを編集し、彼自身の変更を行います私のスタイル設定とフィールドです。

<input id="name" class="form-control" type="text" maxlength="100" name="name" placeholder="Ex.: Metemática" onchange="slugDefine()" onkeyup="slugDefine()" /><br> 

あなたの助けをありがとう!

+0

'name = forms.CharField(label = 'Disciplina'、widget = forms.TextInput(attrs = {'class': 'form-control')のように、' forms.py'に入力用のスタイルを追加することができます。 、 'placeholder': 'Disciplina'、 'onchange': 'slugDefine()'、 'onkeyup': 'slugDefine()'))) –

0

私たちは提出が成功したかどう扱うために別の例を書くことができるという点で、あなたはAJAX .Becauseを使用することをお勧めします。成功した場合input.val( '')else エラーを表示し、入力フィールドをクリーンにしません。

$('#post-form').on('submit', function(event){ 
event.preventDefault(); 
console.log("form submitted!") // sanity check 
create_post();)}; function create_post() { 
console.log("create post is working!") 
$.ajax({ 
    url : "/lrequestConfirmed/", // the endpoint 
    type : "POST", // http method 
    data : { 
     datef: $('#datepicker').val(), 
     type: $('#type').val(), 
     reason: $('#reason').val() 

    }, // data sent with the post request 

    // handle a successful response 
    success : function(json) { 
     $('#datepicker').val(''); // remove the value from the input 
     $('#reason').val(''); 
     $('#results').html("<div class='alert alert-success alert-dismissable'><a href='#'' class='close' data-dismiss='alert' aria-label='close'>×</a><strong>Success!</strong> Your request has been recored</div>"); 
     console.log(json); // log the returned json to the console 
     console.log("success"); // another sanity check 
    }, 

    // handle a non-successful response 
    error : function(xhr,errmsg,err) { 
     $('#results').html("<div class='alert alert-danger alert-dismissable'><a href='#'' class='close' data-dismiss='alert' aria-label='close'>×</a><strong>Oops!</strong> Something went wrong</div>"); // add the error to the dom 
     console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console 
    } 
}); 
関連する問題