簡體   English   中英

Django Formset不起作用

[英]Django Formset not working

我正在嘗試使用Django表單中提供的表單集。 這是forms.py

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>

在此處輸入圖片說明

請幫忙。

您需要調用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()來驗證表單集中的所有表單:

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

但是請記住,此時的newform沒有數據,只是一個空的NewForm

編輯:

又見對表單集的驗證和錯誤,以及如何在模板輕松地使用它們。

問題是

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

     else:
         formset = newformset()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM