簡體   English   中英

類型錯誤:__str__ 返回非字符串(類型 PhoneNumber)

[英]TypeError: __str__ returned non-string (type PhoneNumber)

我在我的 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:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
    response = get_response(request)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\utils\deprecation.py", line 136, in __call__
    response = self.get_response(request)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
    response = response_for_exception(request, exc)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\core\handlers\exception.py", line 86, in response_for_exception
    response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\core\handlers\exception.py", line 128, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\views\debug.py", line 84, in technical_500_response
    html = reporter.get_traceback_html()
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\views\debug.py", line 317, in get_traceback_html
    return t.render(c)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 208, in render
    return self._render(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 199, in _render
    return self.nodelist.render(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 994, in render
    bit = node.render_annotated(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 961, in render_annotated
    return self.render(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\defaulttags.py", line 315, in render
    return nodelist.render(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 994, in render
    bit = node.render_annotated(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 961, in render_annotated
    return self.render(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\defaulttags.py", line 315, in render
    return nodelist.render(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 994, in render
    bit = node.render_annotated(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 961, in render_annotated
    return self.render(context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 1050, in render
    return render_value_in_context(output, context)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\template\base.py", line 1028, in render_value_in_context
    value = force_text(value)
  File "C:\Users\Emmanuel\Envs\myproject\lib\site-packages\django\utils\encoding.py", line 76, in force_text
    s = six.text_type(s)

django-phonenumber-field說:

返回的對象是PhoneNumber實例,而不是字符串。

您應該執行以下操作:

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

django-phonenumber-field 對象是<class 'phonenumber_field.phonenumber.PhoneNumber'> 的一個實例,因此需要轉換為 django 的類型字符串來呈現它。

有幾種方法可以做到這一點,這里是其中一種方法。

str方法添加到您的模型中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM