2017-02-20 83 views
0

我正在试验django表单提供的formset。 这里是forms.pyDjango Formset不工作

from django import forms 

class NewForm(forms.Form): 
username = forms.CharField(max_length=100, label="Username") 
email = forms.EmailField(label="email") 
city = forms.CharField(label="city") 

Views.py

from django.shortcuts import render 

# Create your views here. 
from .forms import NewForm 
from django.forms import formset_factory 


def formview(request): 
if request.method == 'POST': 
    form = NewForm(request.POST) 
    if form.is_valid(): 
        username = form.cleaned_data['username'] 
        city = form.cleaned_data['city'] 
        email = form.cleaned_data['email'] 
        print(type(form.cleaned_data)) 
        NewFormSet = formset_factory(NewForm) 
        formset = NewFormSet() 
        for form in formset: 
          print(form) 
        for k,v in form.cleaned_data.items(): 
          print(k,v) 
    else: 
      print("ddd") 
      form = NewForm() 
      formset = 0 
    return render(request, 'form.html', {'form':form,'formset':formset}) 

此前据工作正常 但事情是,当我加入这个表单集代码它显示错误

模板:

<html> 
<head> 
    <title>The Form</title> 
</head> 

<body> 
    <form method='POST'>{% csrf_token %} 
    {% for field in form %} 
    {{ field.error }} 
    <br /> 
    {{ field.label }} 
    {{ field }} 
    <br /> 
    {% endfor %}  
<input type="Submit" value="Submit"> 
    </form> 
    {% for f in formset %} 
     <form method='POST'>{% csrf_token %} 
     {% for field in f %} 
     {{ f.error }}<br /> 
     {{ f.label }} 
     {{ f }} 
     <br /> 
     {% endfor %} 
    </form> 
    {% endfor %} 
</body> 
</html> 

enter image description here

请帮忙。

回答

0

需要调用form.is_valid()里清洗/验证,它没有cleaned_data之前,你也应该考虑重新命名循环变量,因为你已经有一个变量命名form

for newform in formset: 
    if newform.is_valid(): 
     for k,v in newform.cleaned_data.items(): 
      print(k,v) 

你也可以调用is_valid()在Formset验证所有形式在该formset:

if formset.is_valid(): 
    for newform in formset: 
     for k,v in newform.cleaned_data.items(): 
      print(k,v) 

但是请记住,newform在这一点上没有任何数据,它只是一个抢先y NewForm

编辑:

又见this的表单集的验证和错误,this如何在模板轻松地使用它们。

0

问题是

def formview(request): 
    newformset = formset_factory(NewForm) 
    if form.is_valid(): 
     formset = newformset(request.POST) 
     .. 
      ... 
     ... 

    else: 
     formset = newformset()