在Django中,提交表单2后如何保留表单数据?

Posted

技术标签:

【中文标题】在Django中,提交表单2后如何保留表单数据?【英文标题】:In Django, how to keep form1 data after submitting form2? 【发布时间】:2015-07-01 21:30:13 【问题描述】:

在我的 Django 视图中,我定义了 form1,用户可以在其中选择条件来过滤将出现在我的网页右侧的数据。在我的 html 文件中,我定义了 form2,其中包含一个带有复选框和提交按钮的数据表(对内容进行 ajax 调用)。

所以我使用 form1 过滤数据(例如:男性,年龄>50),我检查过滤数据的一些行并提交选择。问题是提交后,form1中指定的条件没有保存,右边的数据也没有过滤。 form2提交后如何保留form1中的条件和过滤后的数据?

我的看法:

def entite_new_list(request):
   form1 = EntiteNewFilterForm()
   data = reverse('entite_new_list_json')
   if request.method == 'GET':
        params = request.GET
   if request.method == 'POST' and request.is_ajax:
        params = request.POST
        from_form2 = 'f2' in params and params['f2']=='1'
        if from_form2:
           # process the checked rows
           # conditions formulated before in form1 are lost
        else:
           # simply refresh filtered data by sending httpresponse to ajax call
           # Create the URL query string and strip the last '&' at the end.
           data = ('%s?%s' % (reverse('entite_new_list_json'), ''.join(
              ['%s=%s&' % (k, v) for k, v in params.iteritems()])))\
              .rstrip('&')
           return HttpResponse(json.dumps(data), content_type='application/json')   

   data = ('%s?%s' % (reverse('entite_new_list_json'), ''.join(
       ['%s=%s&' % (k, v) for k, v in params.iteritems()])))\
       .rstrip('&')

   context = RequestContext(request)
   context.update(csrf(request))
   return render_to_response(
    'entites/entite_new_list.html',
    'form1': form1, 'data': data,
    context_instance=context,
)

我的html:

<!-- form1: conditions to filter data -->
<div id="collapseBody" class="panel-collapse collapse in">
   <div class="panel-body">
        % crispy form1 %
   </div>
</div>
...
<!-- form2: filtered data with checkboxes-->
<form id="form2" action="." method="post">
   % csrf_token %
   <div style="text-align:right; padding-bottom:1em;">
       <button type="submit">Submit</button>
   </div>
   <table id="entite_table" class="table-striped">
      <thead> // heading data ... </thead>
   </table>
 </form>
 ...
 <script type="text/javascript">

    $(document).ready(function() 
       var oTable = $('#entite_table').dataTable( 
         ...
         "sAjaxSource": " data "
       );

       var frm2 = $('#form2');    
       frm2.submit( function() 
          var csrftoken = this.csrfmiddlewaretoken.value;
          var checks = oTable.$('input').serialize();
          $.redirect("% url 'entite_new_list' %", 'checks':checks, 'csrfmiddlewaretoken':csrftoken, 'f2':1);
          return false;
        );

       var frm1 = $('#new_filter_form');
       frm1.submit(function () 
         $.ajax(
            type: frm1.attr('method'),
            url: frm1.attr('action'),
            data: frm1.serialize(),
            success: function (data) 
               oTable.fnReloadAjax(data);
            ,
         );
         return false;
       );

谁能帮我解决这个问题? 问候, 帕特里克

【问题讨论】:

【参考方案1】:

也许Form Wizard可以帮你处理这两个表格。

【讨论】:

感谢您的提示。表单向导似乎暗示了多个表单的特定顺序。就我而言,我可以提交 form2 而无需在 form1 中填写任何内容。

以上是关于在Django中,提交表单2后如何保留表单数据?的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter:提交无效表单后如何保留值?

使用JQuery的.ajax()提交表单后当前页面表单内容被清空,请问如何保留数据?

python测试开发django-24.表单提交之get请求

django表单提交后如何用弹框提示成功?

数据当用户在验证失败(Python,Django)时被重定向回表单时如何保留表单?

如何在表单提交后保留文本(如何在提交后不删除自身?)