Django 渲染时捕获到KeyError:';手机';
forms.pyDjango 渲染时捕获到KeyError:';手机';,django,django-forms,django-templates,django-admin,Django,Django Forms,Django Templates,Django Admin,forms.py class UserCreateProfileForm(forms.ModelForm): phone_daytime = forms.IntegerField(required=False) phone_mobile = forms.IntegerField(required=False) class Meta: model = UserProfile fields = ['phone_daytime', 'phone_
class UserCreateProfileForm(forms.ModelForm):
phone_daytime = forms.IntegerField(required=False)
phone_mobile = forms.IntegerField(required=False)
class Meta:
model = UserProfile
fields = ['phone_daytime', 'phone_mobile']
def clean(self):
cleaned_data = self.cleaned_data
phone_daytime = cleaned_data.get('phone_daytime')
phone_mobile = cleaned_data.get('phone_mobile')
if not any([phone_daytime, phone_mobile]):
self._errors['phone_daytime'] = self.error_class(['Enter a valid phone number'])
del self.cleaned_data['phone_daytime']
self._errors['phone_mobile'] = self.error_class(['Enter a valid phone number'])
del self.cleaned_data['phone_mobile']
return cleaned_data
template.py
<tr>
<td>Daytime phone:</td><td>{{ form.phone_daytime }}{{ form.phone_daytime.errors }}</td>
</tr>
<tr>
<td>Mobile phone:</td><td>{{ form.phone_mobile }}{{ form.phone_mobile.errors }}</td>
</tr>
实际上,它应该通过错误消息来实现,因为phone\u day
和phone\u mobile
都声明为IntegerField
。但是这会导致上述错误。需要帮助
谢谢这是因为当您不在phone\u mobile中输入任何内容时,它将不存在于已清理的\u数据中,并且您正试图从中删除它,因此您将收到此错误
删除
下面的一行清除了上述错误,并且验证
也正常工作
del self.cleaned_data['']
谢谢对不起,当我在字段中输入一些“字符串”并按“保存”时出错,如果我在phone_mobile字段中没有输入任何内容,则显示验证错误。@user2086641,答案是正确的。即使字段中的数据无效,也不会在
表单中设置。你应该检查它是否存在于词典中,然后只删除/访问它。正如Rohan所说,在删除之前,你需要检查它是否存在于词典中,然后再对它进行处理
del self.cleaned_data['']