在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后如何保留表单数据?的主要内容,如果未能解决你的问题,请参考以下文章
使用JQuery的.ajax()提交表单后当前页面表单内容被清空,请问如何保留数据?
python测试开发django-24.表单提交之get请求