詳細を更新するために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フォームがフォームのカスタムテンプレートとして機能することを必要としています。誰でも私を導くことができますか?