我正在使用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."))
在我的开发环境中,此表单正常运行。如果有给定电话号码的用户则会引发ValidationError。
当我将相同的代码移入Production时,我遇到以下错误:
Django Version: 1.9.6
Exception Type: ProgrammingError
Exception Value: can't adapt type 'PhoneNumber'
创作者不回应最后的评论,所以我决定在这里提问。你能建议最好的调试方法
答案 0 :(得分:0)
For Production我正在使用Postresql,用于开发Sqlite。 基于这个[答案] [2],Django的过滤器中存在某种错误,具体取决于数据库后端。如果要使用Sqlite,那么:
User.objects.filter(profile__phone__iexact=self.cleaned_data['phonenumber'])
像魅力一样工作。
如果使用Postrgres,它会抛出"不能适应类型"。明确地将值转换为字符串将解决问题:
users = User.objects.filter(profile__phone__iexact=str(self.cleaned_data['phonenumber']))