在django上提交包含错误的表单后,保留字段数据

时间:2017-07-29 23:58:13

标签: python django forms

在我提交带有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)

2 个答案:

答案 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>

感谢您的帮助!