我一直在学习Django一周,为了实现身份验证系统,我创建了models.py文件作为教程。
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
class User(AbstractBaseUser):
username = models.CharField('username', max_length = 10, unique = True, db_index = True)
email = models.EmailField('email address', unique = True)
joined = models.DateTimeField(auto_now_add = True)
is_active = models.BoolenField(default = True)
is_admin = models.BoolenField(default = False)
USERNAME_FIELD = 'username'
def __unicode__(self):
return self.username
我了解用户名,电子邮件,已加入,is_active,is_admin 的含义,但我无法理解为何使用 USERNAME_FIELD 。
由 models.CharField 创建的用户名等于 USERNAME_FIELD '用户名' >
为什么我必须创建 USERNAME_FIELD ?
def __unicode __(自我):功能是什么意思?
答案 0 :(得分:2)
根据docs,USERNAME_FIELD是:
描述用户模型上用作唯一标识符的字段名称的字符串。这通常是某种用户名,但也可以是电子邮件地址或任何其他唯一标识符。该字段必须是唯一的(即,在其定义中设置unique = True),除非您使用可支持非唯一用户名的自定义身份验证后端。
因此,USERNAME_FIELD
指定将哪个模型字段用作用户名。如果您的应用使用的是电子邮件地址而不是用户名,则可以使用USERNAME_FIELD
配置该地址。
__unicode__(self)
方法返回对象的字符串表示形式。没有它,只要您尝试显示对象,它就会显示为:<User: User object>
。正如您现在所拥有的那样,显示用户对象将改为显示用户的用户名。在Django教程part 2中,他们将__str__
方法与@python_2_unicode_compatible
装饰器结合使用,使其与Python 2一起使用。在Python 3中__str__
相当于{{ Python 2中的1}}。
答案 1 :(得分:1)
检查documentation是否有您的Django版本:
<强> USERNAME_FIELD 强>
描述用户模型上用作唯一标识符的字段名称的字符串。这通常是用户名 某种,但也可以是电子邮件地址,或任何其他独特的 标识符。字段必须是唯一的(即设置为 unique = True 它的定义)。
.row::after {
content: "";
clear: both;
display: table;
}
默认为USERNAME_FIELD
,因此如果默认设置适用,您可以跳过在自定义用户模型中设置它。
您可以阅读"username"
和__str__()
方法here。