問題如下


解決方法:
方法1.點擊右上角的admin,把帳號退掉,然后在進入對應頁面就可以了

方法2.不退出admin賬號的話,我們看到在自己寫的users模型中 替換了django自帶的AbstractUser,然后又設置了name可以為空,所以返回non-string
在str的函數中,將返回值設置成AbstractUser里面的username就好了
apps.users.models源碼:
from django.contrib.auth.models import AbstractUser
class UserProfile(AbstractUser):
"""
用戶
"""
# CharField 一定要加max_length參數,說明這個字段的最大長度
name = models.CharField(max_length=30, null=True, blank=True, verbose_name="姓名")
birthday = models.DateField(null=True, blank=True, verbose_name="出生年月")
gender = models.CharField(max_length=6, choices=(("male", u"男"),("female", u"女")),default="female", verbose_name="性別")
mobile = models.CharField(max_length=11, verbose_name="電話")
email = models.EmailField(max_length=100, null=True, blank=True, verbose_name="郵箱")
class Mate:
verbose_name = "用戶"
verbose_name_plural = verbose_name
def __str__(self):
return self.username
django.contrib.auth.models.AbstractUser源碼:
class AbstractUser(AbstractBaseUser, PermissionsMixin):
"""
An abstract base class implementing a fully featured User model with
admin-compliant permissions.
Username and password are required. Other fields are optional.
"""
username_validator = UnicodeUsernameValidator() if six.PY3 else ASCIIUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
