Django中的ModelForm无法接收数据
Posted
技术标签:
【中文标题】Django中的ModelForm无法接收数据【英文标题】:ModelForm in Django fails to receive data 【发布时间】: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>
【问题讨论】:
【参考方案1】:出于某种原因,您在 POST 块中的表单上设置了前缀,但在 GET 情况下没有。因此,这些字段是在没有前缀的情况下呈现的,但在提交时,表单正在寻找带有前缀的字段。
这里似乎没有任何理由使用前缀;删除它。
【讨论】:
谢谢丹,这就是问题所在!以上是关于Django中的ModelForm无法接收数据的主要内容,如果未能解决你的问题,请参考以下文章