想使用django中的用户认证组件,但是其中用户信息表的字段不够用,可以自定义一张用户表继承自带的用户表实现想要的功能。
1.继承用户表并定义字段
from django.db import models
from django.contrib.auth.models import User, AbstractUser
class UserInfo(AbstractUser):
"""
用户信息
"""
nid = models.AutoField(primary_key=True)
telephone = models.CharField(max_length=11, null=True, unique=True)
avatar = models.FileField(upload_to='avatars/', default="/avatars/default.png")
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
blog = models.OneToOneField(to='Blog', to_field='nid', null=True, on_delete=models.CASCADE)
def __str__(self):
return self.username
2.修改项目配置
此时不能直接使用python manage.py makemigrations命令做数据库迁移,会报错:
SystemCheckError: System check identified some issues:
ERRORS:
MyBlog.UserInfo.groups: (fields.E304) Reverse accessor for'UserInfo.groups' clashes with reverse accessor for 'User.groups'.
HINT: Add or change a related_name argument to the definition for 'UserInfo.groups' or 'User.groups'.
只需要修改项目中的settings.py,在其任意一行配置好自己刚刚写好的用户表路径即可。
AUTH_USER_MODEL = "模块名.UserInfo"
3.数据库迁移
python manage.py makemigrations
python manage.py migrate
网友评论