0

詳細を更新するためにdjangoフォームを使用しています。変更の保存をクリックすると、ajax 呼び出しが行われ、ビューが実行され、ajax 応答が送信され、成功コードが実行され、ページが再度リロードされます。フォームが有効ではなくなったため再読み込み時に n が返され、 from.is_valid() の else 部分が実行されます。

if form.is_valid:
    #do something
    return HttpResponse(simplejson.dumps(response), mimetype='application/json')
else:
    #do something
    return render_to_response('ts.html', {'form': form}, context_instance = RequestContext(request))

フォームの送信が成功したときにページのリロードを回避し、ajax 応答を返すようにしたい。どうすればそれを達成できますか?

コードを変更しました。これがビュー、テンプレート、および jquery です。

if request.POST:
    if form.valid():
         if credentials.correct():
               resp = {'success': True}
               return HttpResponse(simplejson.dumps(resp), mimetype='application/json')
         else:
              resp = {'success': False}
              return HttpResponse(simplejson.dumps(resp), mimetype='application/json')
    else:
         print "error in form"
         return render(request, 'manage_accounts.html', {'creds': creds, 'form': form})
else:
     form = SomeForm()
     return render(request, 'manage_accounts.html', {'creds': creds, 'form': form})

テンプレート

<form action="/accounts/" method="POST" id="bitlychangeform">
  <div id="ajaxwrapper">
{% csrf_token %}
{{ form.non_field_errors }}
<!--{% include "Change_bitly_form.html" %}-->
{{ form.as_p }}
      <div class="clearfix">
        <label></label>
            <div class="input" style="float:right">
            <input type="submit" id="save" value="Save Changes" class="btn btn-primary  "/>
        </div>
     </div>
  </div>
</form>

Jクエリ:

$(function(){
var form = $('#bitlychangeform');
    form.submit(function(e) {
    jQuery("#save").attr('disabled', true)
    jQuery("#ajaxwrapper").load(
          form.attr('action') + ' #ajaxwrapper',
          form.serializeArray(),
          function(data) {
              jQuery("#save").attr('disabled', false)
      alert(data);
          });
  return false;
      e.preventDefault(); 
  });
});

Django フォームを {{ form.as_p }} として使用すると、ページのリロードは発生しませんが、「** を使用してパスワード文字フィールドとしてフィールドを使用し、編集ボタンを 1 回クリックした後にのみ編集可能なフォームのカスタム テンプレート」を使用すると、 form.valid() は false を返します。

私は、djangoフォームがフォームのカスタムテンプレートとして機能することを必要としています。誰でも私を導くことができますか?

4

2 に答える 2

1

フロントエンドでデフォルトのフォーム送信動作をオーバーライドしておらず、通常どおりフォームを送信していると思います。

フォーム送信のデフォルトの動作を抑制していることを確認してください。 このページでは、 templates/contact/form.html の下に優れた例を示します

于 2012-05-16T12:59:22.660 に答える
1

フォームの送信時に false を返すことで、JavaScript でこれを処理できます。

form.submit(){
    #do something
    #make AJAX call
    #do something
    return false;
}
于 2012-05-16T14:23:39.590 に答える