2015-04-23 50 views
0

在我的Django視圖中,我已經定義了form1,用戶可以在其中選擇條件來篩選出現在我網頁右側的數據。在我的html文件中,我定義了form2,它包含一個帶有複選框和提交按鈕的數據表(用ajax調用內容)。因此我使用form1過濾數據(例如:men,age> 50),我檢查過濾的數據上的一些行並提交選擇。問題出在提交後,form1中指定的條件不會保存,右側的數據也不會被過濾。我怎樣才能保持form1的條件和form2提交後的過濾數據?在Django中,如何在提交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; 
     }); 

誰能幫助我嗎? Regards, Patrick

回答

0

也許Form Wizard可以幫助你處理這兩種形式。

+0

謝謝你的提示。表單嚮導似乎暗示了多個表單的特定順序。在我的情況下,我可以提交表單2,而無需在form1中填寫任何內容。 – Patrick

相關問題