【发布时间】: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;
});
谁能帮我解决这个问题? 问候, 帕特里克
【问题讨论】:
标签: jquery ajax django forms post