2017-02-20 9 views
0

Я экспериментировал с наборами форм, представленными в формах джанго. здесь является 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}) 

Ранее работал отлично Но дело в том, когда я добавил этот код 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.

EDIT:

Смотрите также this для formset проверки и ошибок, и this, как использовать их легко в шаблоне.

0

Проблема была

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

    else: 
     formset = newformset() 
Смежные вопросы