Django 渲染时捕获到KeyError:';手机';

Django 渲染时捕获到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_

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_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['']