Django,"不能适应类型错误",Sqlite vs Postresql

时间:2016-11-24 12:34:33

标签: python django

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

创作者不回应最后的评论,所以我决定在这里提问。你能建议最好的调试方法

1 个答案:

答案 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']))