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