Django, "Can't adapt type error" , Sqlite vs Postresql



我正在使用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']))

最新更新