我的Django应用程序中有一个基本的朋友邀请表,如下所示:
class FriendInviteForm(forms.Form):
email = forms.EmailField()
当用户邀请一个人时,它可以很好地工作,但我希望允许用户根据自己的喜好邀请尽可能多的朋友。我试图构建的实现是显示包含3个电子邮件字段的表单,并允许用户使用jQuery在客户端动态添加更多字段。
处理此类表单创建的最佳方法是什么,以及如何处理视图中的电子邮件字段?我还可以使用Django的内置表单吗?
谢谢!
答案 0 :(得分:2)
我认为formsets在这方面没有多大帮助,因为OP希望拥有单一的表单。我只想创建一个带有多行文本字段的表单,要求用户每行输入一封电子邮件,或者用分号分隔它们,并在提交表单时从那里解析电子邮件。
如果你确实需要单独的字段,我会查看数组字段。我自己没有这样做,但例如,这是一个类似的问题:Django equivalent of PHP's form value array/associative array
答案 1 :(得分:1)
为什么不使用上面提到的Django formsets?您可以定义额外的电子邮件字段,如下所示:
email_formset = formset_factory(EmailForm, extra=2)
group_name_form = GroupNameForm() # Additional form for usefull data.
然后在模板中使用其他形式:
<form action="" method="post">
{% csrf_token %}
{{ group_name_form.as_p }}
{{ email_formset.as_p }}
<input type="submit" value="Send Invites"> <!-- Single Submit button -->
</form>
最后,当你在views.py中时,你可以处理两种形式:
def view(request):
if request.method == 'POST':
email_formset = formset_factory(EmailForm, extra=2)
email_formset = email_formset(request.POST)
group_name_form = GroupNameForm(request.POST)
# And validate both forms if needed.
if email_formset.is_valid() and group_name_form.is_valid():
# Do something with cleaned_data.
group_name_form.cleaned_data['something']
for form_data in email_formset.cleaned_data:
print form_data
所以这样你就会有一个提交按钮,一个HTML表单但两个django表单表示。如何处理它们 - 只有你自己的选择。