我正在使用django-phoneNumber-field电池用于我的django应用程序(django 1.9,python 3.5)。
我的形式如下:
class PhoneChangeForm(forms.Form):
phonenumber = PhoneNumberField(widget=PhoneNumberPrefixWidget(attrs={'placeholder': _('Phone number')}),
label=_("Enter phone"))
def clean_phonenumber(self):
users = User.objects.filter(profile__phone__iexact=self.cleaned_data['phonenumber'])
if users.count() == 0:
return self.cleaned_data['phonenumber']
else:
raise forms.ValidationError(_("This phone is already in use."))
在我的开发环境中,这种形式正常工作。如果有给定电话号码的用户,则会提高验证。
当我将相同的代码移动到生产中时,我有以下错误:
Django Version: 1.9.6
Exception Type: ProgrammingError
Exception Value: can't adapt type 'PhoneNumber'
创作者没有回应最后的评论,所以我决定在这里询问。您能提出调试的最佳方法
用于生产的我正在使用poststresql进行开发sqlite。基于此[答案] [2],Django的过滤器中有某种错误,具体取决于DB后端。如果要使用sqlite,则:
User.objects.filter(profile__phone__iexact=self.cleaned_data['phonenumber'])
的工作就像魅力一样。
如果要使用posttrgres,它将抛出"不能适应类型"。明确将值转换为字符串将解决问题:
users = User.objects.filter(profile__phone__iexact=str(self.cleaned_data['phonenumber']))