我使用標準的Django模型表單,然後在HTML模板中使用我們當前正在重新調整的應用程序系統。如何在提交時收集克隆的Django表單?
棘手位(至少對我來說)是在其中動態地增加了額外的形式使用jQuery插件稱爲"SheepIt" HTML中的過程中的一個步驟,我想知道如何將所有的表單數據可從有關的被容易地收集視圖。
的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」方法?也許,他們聚集到一個formset然後做類似的東西:
for f in formset.forms:
if f.is_valid():
f.save()
編輯: 下面是一些我目前變化無常的意見代碼:
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))
任何想法的傢伙?
表單集是這樣的事情更好,但你需要_SheepIt_插上它發送適當的數據。可能有一些django特定的插件,您可以使用動態數量的表單。 – Rohan
感謝Rohan,我實際上已經做了一些紮根,我嘗試[django-dynamic-formset](http://code.google.com/p/django-dynamic-formset/)開始。 – Ogre
無果,悲傷。 – Ogre