gpt4 book ai didi

jquery - 克隆的 Django 表单在提交时应如何收集?

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:09 25 4
gpt4 key购买 nike

我正在使用标准 Django 模型表单,然后将其用于我们当前正在重新调整的应用程序系统的 HTML 模板中。

棘手的一点(至少对我来说)是使用名为 "SheepIt" 的 jQuery 插件动态向 HTML 添加附加表单的过程中的一个步骤。我想知道如何在相关 View 中轻松收集所有表单数据。

SheepIt 位:

$(document).ready(function() {   
var sheepItForm = $('#sheepItForm').sheepIt({
separator: '',
allowRemoveLast: true,
allowRemoveCurrent: true,
allowRemoveAll: false,
allowAdd: true,
allowAddN: false,
minFormsCount: 1,
iniFormsCount: 1
});

});

模板代码:

<div id="entry_form">
<form method="post" enctype="multipart/form-data" action="/enter/2/" id="sheepItForm">
<fieldset id="sheepItForm_template">
<a id="sheepItForm_remove_current">X</a>
<div class="select">{{ form.select }}</div>
<div class="text">{{ form.text }}</div>
<div class="upload">{{ form.upload }}</div>
</fieldset>

<div id="sheepItForm_noforms_template">No Entries</div>

<div id="sheepItForm_controls">
<div id="sheepItForm_add"><a><strong>+</strong> Add Another Entry</a></div>
</div>

{{ formset.management_form }}
<input type="submit" value="Proceed to Payment">
</form></div>

上面输出了一个带有按钮的小表单,用于使用 SheepIt 插件添加和删除表单的克隆。

通常,我们会通过以下方式收集表单数据:

form_data = request.POST.copy()

或类似的。我应该迭代发布数据中收集的所有内容,还是有更好的“Pythonic”方式来处理这些小克隆?也许将它们收集到一个表单集中,然后执行类似的操作:

for f in formset.forms:
if f.is_valid():
f.save()

编辑:以下是我当前正在修改和更改的一些 View 代码:

    form = EntryForm_2_set.form()
template_dict['form'] = form
if request.method == 'POST':
# from forms.py: EntryForm_2_set = forms.formsets.formset_factory(EntryForm_2, extra=0)
formset = EntryForm_2_set(request.POST)
if formset.is_valid():
for f in formset.forms:
if f.is_valid():
f.save()
entry_url = reverse('entry-stage',kwargs={'stage':3})
return HttpResponseRedirect(entry_url)
else:
formset = EntryForm_2_set()
template_dict['formset'] = formset
return render_to_response('submission-stage-two.html', template_dict, RequestContext(request))

大家有什么想法吗?

最佳答案

最终我自己解决了这个问题。

唯一剩下的就是重新输入时填写表格。

我之前缺少的是表单集工厂的实现及其灵 active 。如果有更优雅的解决方案,我有兴趣听到有关 future 更新的建议。

干杯,伙计们。

<小时/>

查看代码:

# Create the formset factory with an initial form (extra=1)
EntryForm_2Set = formset_factory(EntryForm_2,extra=1)
if request.method == 'POST':
formset = EntryForm_2Set(request.POST,request.FILES)
if formset.is_valid():
instances = []
for f in formset.forms:
# get the new applicant instance
inst = f.save()
instances.append(inst)
for i in instances:
# amend the applicant instance
i.applicant = request.session['applicant']
i.save()
num_entered = formset.total_form_count()
entry_url = reverse(...) # some reversal
return HttpResponseRedirect(entry_url)
else:
formset = EntryForm_2Set()
template_dict['formset'] = formset
return render_to_response('submission-stage-two.html', template_dict, RequestContext(request))

模板代码:

<div id="entry_form">
<form method="post" enctype="multipart/form-data" action="/enter/2/" id="sheepItForm">

{% for form in formset.forms %}
<fieldset id="sheepItForm_template">
<a id="sheepItForm_remove_current">X</a>
<div class="select">{{ form.select }}</div>
<div class="text">{{ form.text }}</div>
<div class="upload">{{ form.upload }}</div>
</fieldset>
{% endfor %}

<div id="sheepItForm_controls">
<div id="sheepItForm_add"><a ><strong>+</strong> Add Another</a></div>
</div>

{{formset.management_form }}
<input type="submit" value="Proceed">

关于jquery - 克隆的 Django 表单在提交时应如何收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13251155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com