Django访问表单数据 [英] Django accessing formset data
问题描述
我无法访问通过我的表单提交的数据。这是我的代码:
I'm having difficulty accessing the data submitted through my formset. Here is my code:
模板:
<form action="" method="post">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{ form.as_p }}
{% endfor %}
<input type="submit" value="Submit">
</form>
查看:
def addMembers(request, id, members):
if request.user.is_authenticated():
members = int(members)
MemberFormSet = formset_factory(MemberForm, extra = members)
if request.method == 'POST':
print 'post'
formset = MemberFormSet(request.POST)
if formset.is_valid():
cd = formset.cleaned_data
for f in formset:
first_name = cd.first_name
last_name = cd.last_name
email = cd.email
house = House.objects.get(id = id)
member = Member(first_name = first_name, last_name = last_name, email = email, house = house, created_on = timezone.now())
member.save()
return HttpResponseRedirect(reverse('houses:controlPanel'))
else:
formset = MemberFormSet()
return render_to_response('houses/add_members.html', {'formset' : formset}, context_instance = RequestContext(request))
return HttpResponseRedirect(reverse('allauth.account.views.login'))
我尝试了几种访问方式数据除了当前写的包括:
f ['attribute']
cd ['attribute']
request.POST ['attribute']
formset.cleaned_data ['attribute']
I've tried several ways of accessing the data aside from what is currently written including:
f['attribute']
cd['attribute']
request.POST['attribute']
formset.cleaned_data['attribute']
我收到的错误范围从 uKey电子邮件Form中找不到
列表索引必须是整数,而不是str
I get errors ranging from u"Key 'email' not found in Form"
to list indices must be integers, not str
如何访问表单提交的数据? Django的文档没有给出一个明确的答案和搜索周围,我发现许多不同的方式,但没有一个工作。感谢您的帮助。
How should I be accessing the data submitted by a formset? Django's documentation fails to give a clear answer to this and searching around I find many different ways but none that have worked yet. Thanks for your help.
推荐答案
cd是一个字典。另外,您可能想要从单个表单中获取字典值,而不是从formset获取
cd is a dictionary. Also, you might want to fetch the dictionary values from individual forms rather than the formset
if request.method == 'POST':
formset = MemberFormSet(request.POST)
if formset.is_valid():
for f in formset:
cd = f.cleaned_data
first_name = cd.get('first_name')
last_name = cd.get('last_name')
email = cd.get('email')
house = House.objects.get(id = id)
member = Member(first_name = first_name, last_name = last_name, email = email, house = house, created_on = timezone.now())
member.save()
return HttpResponseRedirect(reverse('houses:controlPanel'))
这篇关于Django访问表单数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!