【问题标题】:ModelForm in Django fails to receive dataDjango中的ModelForm无法接收数据
【发布时间】:2016-11-15 20:20:58
【问题描述】:

我有一个 ModelForm,所有字段都是我想要的。当我在 HTML 中呈现此表单时,我提供了这些字段中所需的所有数据,我单击提交,但我的表单在 is_valid 验证时失败,当我打印错误时,每个输入都返回以下错误:“此字段是必需的。”

这里的问题是我为每个字段提供数据,但似乎 Django 出于某种原因没有读取它们。

查看

if request.POST:
        addressForm = AddressForm(request.POST, prefix="AddressForm")
        if addressForm.is_valid():
            return HttpResponseRedirect('/thanks/')
        print(addressForm.errors)

addressForm = AddressForm()
return render(request, 'index.html', {'addressForm':addressForm})

表格

class AddressForm(forms.ModelForm):
    class Meta:
        model = Address
        fields = ['AddressLine', 'StreetNumber', 'Country', 'City', 'PostalCode']

    def __init__(self, *args, **kwargs):
        super(AddressForm, self).__init__(*args, **kwargs)
        self.fields['AddressLine'].widget.attrs.update({'class' : 'form-control'})
        self.fields['StreetNumber'].widget.attrs.update({'class': 'form-control'})
        self.fields['Country'].widget.attrs.update({'class': 'form-control'})
        self.fields['City'].widget.attrs.update({'class': 'form-control'})
        self.fields['PostalCode'].widget.attrs.update({'class': 'form-control'})

型号

class Address(models.Model):
    AddressLine = models.CharField(max_length=100, blank=False)
    StreetNumber = models.CharField(max_length=100, blank=False, default=0)
    Country = models.ForeignKey(Country, blank=False)
    City = models.CharField(max_length=100, blank=False)
    PostalCode = models.CharField(max_length=10, blank=False)

HTML

<div class="row">
    <div class="form-group col-md-2">
        {{ addressForm.StreetNumber }}
    </div>
    <div class="form-group col-md-10">
        {{ addressForm.AddressLine }}
    </div>
</div>

<div class="row">
    <div class="form-group col-md-4">
        {{ addressForm.Country }}
    </div>
    <div class="form-group col-md-4">
        {{ addressForm.City }}
    </div>
    <div class="form-group col-md-4">
        {{ addressForm.PostalCode }}
    </div>
</div>

正如我所说的错误是:

<ul class="errorlist">
  <li>AddressLine
     <ul class="errorlist">
        <li>This field is required.</li>
     </ul>
  </li>
  <li>City
     <ul class="errorlist">
        <li>This field is required.</li>
     </ul>
  </li>
  <li>Country
     <ul class="errorlist">
        <li>This field is required.</li>
     </ul>
  </li>
  <li>PostalCode
     <ul class="errorlist">
        <li>This field is required.</li>
     </ul>
  </li>
  <li>StreetNumber
     <ul class="errorlist">
        <li>This field is required.</li>
     </ul>
  </li>
</ul>

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    出于某种原因,您在 POST 块中的表单上设置了前缀,但在 GET 情况下没有。因此,这些字段是在没有前缀的情况下呈现的,但在提交时,表单正在寻找带有前缀的字段。

    这里似乎没有任何理由使用前缀;删除它。

    【讨论】:

    • 谢谢丹,这就是问题所在!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多