Django accessing formset data

自闭症网瘾萝莉.ら 提交于 2019-11-30 09:17:46

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'))

I think you should be using a model_formsetfactory, or even better, an inlineformset_factory. You are populating models from form data, which is what they are designed for. Get the dirty models from the formset, using commit=False, and add in your House relationship. Something like this:

MemberFormSet = model_formset_factory(Member, extra= members)
if request.method == POST:
    formset = MemberFormSet(request.POST)
    if formset.is_valid():
        house = House.objects.get(id = id)
        models = formset.save(commit=False)
        for member in models:
            member.house = house
            member.save()
        return render(<your data>)
else:
    formset = MemberFormSet()
return render(<your data>)

Note your get() will also throw an exception if the House object doesn't exist. Just a design consideration.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!