类型错误: __str__返回非字符串 (键入电话号码)



我在我的django-rest-api应用程序中使用PhoneNumberField

class User(AbstractBaseUser, PermissionsMixin):
phone_number = PhoneNumberField(_('phone number'), unique=True)

我成功地创建了带有电话号码和密码的超级用户。但是每次运行服务器时,我都会收到错误TypeError: __str__ returned non-string (type PhoneNumber)有人可以帮我吗

Stacktrace
TypeError: __str__ returned non-string (type PhoneNumber)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangocorehandlersexception.py", line 39, in inner
response = get_response(request)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangoutilsdeprecation.py", line 136, in __call__
response = self.get_response(request)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangocorehandlersexception.py", line 41, in inner
response = response_for_exception(request, exc)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangocorehandlersexception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangocorehandlersexception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangoviewsdebug.py", line 84, in technical_500_response
html = reporter.get_traceback_html()
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangoviewsdebug.py", line 317, in get_traceback_html
return t.render(c)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 208, in render
return self._render(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 199, in _render
return self.nodelist.render(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 994, in render
bit = node.render_annotated(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 961, in render_annotated
return self.render(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatedefaulttags.py", line 315, in render
return nodelist.render(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 994, in render
bit = node.render_annotated(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 961, in render_annotated
return self.render(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatedefaulttags.py", line 315, in render
return nodelist.render(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 994, in render
bit = node.render_annotated(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 961, in render_annotated
return self.render(context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 1050, in render
return render_value_in_context(output, context)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangotemplatebase.py", line 1028, in render_value_in_context
value = force_text(value)
File "C:UsersEmmanuelEnvsmyprojectlibsite-packagesdjangoutilsencoding.py", line 76, in force_text
s = six.text_type(s)

从django-phonenumber-field它说:

返回的对象是电话号码实例,而不是字符串。

你应该做这样的事情:

def __str__(self):
return str(self.phone_number)

django-phonenumber-field对象是<类'phonenumber_field.phonenumber.PhoneNumber'>的实例,所以你需要转换为django的类型字符串来呈现它。

有几种方法可以做到这一点,这是其中一种方法。

str方法添加到模型中:

def __str__(self):
return f"{self.phone_number}"

最新更新