Django中自定义用户表的使用

想使用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

你可能感兴趣的:(Django中自定义用户表的使用)