Django自定义user表
2019-02-13 本文已影响2人
渔父歌
首先我们要定义一个 User表来替换 Django自带的 User表
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
class Meta:
db_table = 'auth_user'
username = models.CharField(max_length=50, unique=True)
password = models.CharField(max_length=100)
email = models.CharField(max_length=100, default='')
phone = models.CharField(max_length=20, default='')
role = models.CharField(max_length=10, default='user', choices=(('user', '普通用户'), ('admin', '管理员'), ('vip', 'VIP')))
query_num = models.IntegerField(default=0)
download_num = models.IntegerField(default=0)
last_active = models.DateField(auto_now_add=True)
created_time = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(null=True)
@property
def is_active(self):
return self.role == 'admin'
@property
def is_staff(self):
return self.role == 'admin'
def has_perm(self, *args, **kwargs):
return self.role == 'admin'
def has_module_perms(self, *args, **kwargs):
return self.role == 'admin
需要注意的是我们自定义的表的表名必须是 auth_user
,而且必须有属性 is_active
, is_staff
, has_perm
和 has_module_perms
。
为了避免其他的问题我们最好继承 AbstracUser
表。
这里我添加了一个 role属性,然后根据 role属性的值来确定要返回的值。
添加完表后我们还需要更改 settings.py
,在 settings里添加 AUTH_USER_MODEL = "app.CustomUser"
。
这里的格式是 应用.表
,应用必须是已安装的应用。
最后我们只要在命令行里执行 makemigrations
和 migrate
命令就行了。
不过如果之前已经执行过 migrate
命令的话就需要将原来的表全部删除,再重新生成。