首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Formset不工作

Django Formset不工作
EN

Stack Overflow用户
提问于 2017-02-21 05:15:20
回答 2查看 1.1K关注 0票数 0

我正在试验django forms中提供的表单集。这是forms.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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})

之前它工作得很好,但问题是当我添加这个表单集代码时,它显示了错误

模板:

代码语言:javascript
复制
<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>

请帮帮忙。

EN

回答 2

Stack Overflow用户

发布于 2017-02-21 05:42:50

您需要调用form.is_valid()来清理/验证它,在它没有cleaned_data之前,您还应该考虑重命名循环变量,因为您已经有一个名为form的变量

代码语言:javascript
复制
for newform in formset:
    if newform.is_valid():
        for k,v in newform.cleaned_data.items():
            print(k,v)

您还可以在表单集中调用is_valid()来验证表单集中的所有表单:

代码语言:javascript
复制
if formset.is_valid():
    for newform in formset:
        for k,v in newform.cleaned_data.items():
           print(k,v)

但请记住,newform在这一点上没有数据,它只是一个空的NewForm

编辑:

另请参阅this了解表单集验证和错误,以及this如何在模板中轻松使用它们。

票数 0
EN

Stack Overflow用户

发布于 2017-02-21 14:56:23

问题是

代码语言:javascript
复制
def formview(request):
     newformset = formset_factory(NewForm)
     if form.is_valid():
         formset = newformset(request.POST)
         ..
          ...
         ...

     else:
         formset = newformset()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42354337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档