在我提交带有django错误的表单后,表单的所有字段都会被清除。我希望保留这些字段的信息,因为它可以帮助用户提交数据。
这是我对应用程序的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 :(得分:0)
我建议您使用ajax。因为我们可以编写不同的案例来处理提交是否成功。如果成功输入.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
}
});
答案 1 :(得分:0)
就像Bear Brown说的那样,错误后数据会保留在字段上,但是我没有使用Django的纯表单,我需要做一些调整。 我使用原始Django表单创建了一个隐藏的div,并使用JavaScript传递了我的字段的数据。 这是我如何进行的一个例子:
原始的Django表单具有基于表单上字段名称的id。因此,如果您在forms.py上定义字段的名称,例如&#34; name&#34;,则该字段的ID将为&#34; id_name&#34;:
function error(){ document.getElementById('name').value = document.getElementById('id_name').value;}
这就是调用表单上的字段的方式。在它渲染之后,它将包含表单字段的数据并具有id,因此我按id(&#34; id_name&#34;)获取元素并传输我的个性化字段的信息。
<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>
感谢您的帮助!