更换用户表单,建议在系统开发的初期就更换,不然更换时依赖问题会很严重。

具体操作:

首先在对应子模块的models.py中新增一个新用户表的模型 ,记得先继承AbstractUser

# Create your models here.

from django.db import models
from django.contrib.auth.models import AbstractUser,BaseUserManager
from django.conf import settings



class UserManager(BaseUserManager):

    def create_user(self, username, email, password=None):
        if username is None:
            raise TypeError('用户应该有一个用户名')
        if email is None:
            raise TypeError('用户应该有一个电子邮件')

        user = self.model(username=username, email=self.normalize_email(email))
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, username, email, password=None):
        if password is None:
            raise TypeError('密码不应该是None')

        user = self.create_user(username, email, password)
        user.is_superuser = True
        user.is_staff = True
        user.save()
        return

#更新需要新增一个user表,不然以后更新的时候会出现问题
class Users(AbstractUser, models.Model):
    IDENTITY_CHOICES = (
        (0, "超级管理员"),
        (1, "普通管理员"),
        (2, "系统用户"),
    )

    username = models.CharField(max_length=50, unique=True, db_index=True, verbose_name='用户账号', help_text="用户账号")
    email = models.EmailField(max_length=60, verbose_name="邮箱", null=True, blank=True, help_text="邮箱")
    mobile = models.CharField(max_length=30,verbose_name="电话", null=True, blank=True, help_text="电话")
    avatar = models.CharField(max_length=200,verbose_name="头像", null=True, blank=True, help_text="头像")
    name = models.CharField(max_length=40, verbose_name="姓名", help_text="姓名")
    nickname = models.CharField(max_length=100, help_text="用户昵称", verbose_name="用户昵称",default="")
    address = models.CharField(max_length=100, help_text="地址", verbose_name="地址",default="")
    identity = models.SmallIntegerField(choices=IDENTITY_CHOICES, verbose_name="身份标识", null=True, blank=True, default=2,help_text="身份标识")
    is_delete = models.BooleanField(default=False, verbose_name="是否逻辑删除", help_text="是否逻辑删除")
    update_datetime = models.DateTimeField(auto_now=True, null=True, blank=True, help_text="修改时间",
                                           verbose_name="修改时间")
    create_datetime = models.DateTimeField(auto_now_add=True, null=True, blank=True, help_text="创建时间",
                                           verbose_name="创建时间")
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ["email"]

    objects = UserManager()
    class Meta:
        db_table = "users"
        verbose_name = '用户表'
        verbose_name_plural = verbose_name
        ordering = ('-create_datetime',)





随后在settings.py中修改用户表配置,我这边子模块名称是study,可安装实际情况更换

AUTH_USER_MODEL = 'study.Users'  # 对应模块的模型名称
USERNAME_FIELD = 'username' #用户的登录名称

在settings.py中的INSTALLED_APPS加上子模块模块,我这边名叫study,

随后先运行

python manage.py makemigrations

生成迁移文件,有这个就成功了。

随后运行

python manage.py migrate       

生成表单。

如果系统已经生成过用户表,上面这种操作是没法更换的,分享一下一劳永逸的办法。

需要先把所有模块中的migrations文件下,除了__init__.py之外的文件都清空掉,然后删除数据库中的所有表单,然后再按照上面的流程走一遍,这样就行了。所以建议在系统开发初期更换用户表。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐