扩展auth_user表

扩展auth_user表

方法一:

from django.contrib.auth.models import User


# 第一种: 建立一对一外键关系  (不推荐)
class UserDetail(models.Model):
    phone = models.BigIntegerField()
    user = models.OneToOneField(to='User')

 

settings文件中书写:

AUTH_USER_MODEL = 'app01.User'

 

方法二:

from django.db import models
from django.contrib.auth.models import AbstractUser


# 第二种:面向对象的继承
class UserInfo(AbstractUser):

    phone = models.BigIntegerField(verbose_name='用户手机号码')
    addr = models.CharField(max_length=255, verbose_name='家庭住址')

    """
    提示:
        如果继承了AbstractUser
        那么在执行数据库迁移命令的时候auth_user表就不会再创建出来了
        而UserInfo表中会出现auth_user所有的字段外加自己扩展的字段
        这么做的好处在于你能够直接点击你自己的表更加快速的完成操作及扩展    
    """

 

settings文件中书写:

AUTH_USER_MODEL = 'app01.UserInfo'

 

 

继承的注意事项:

1. 继承之前保证没有执行过数据库迁移命令

  保证auth_user没有被创建,如果当前库已经创建了那么你就重新换一个库

 

2. 继承的类里面不要覆盖AbstractUser默认的的字段名

  表里面有的字段都不要动,只扩展额外字段即可

 

3. 需要在settings.py配置文件中告诉django你要用UserInfo替代auth_user

  AUTH_USER_MODEL = 'app01.UserInfo'

  这句话的含义就类似于我们书写表类的完后, 执行完数据库迁移命令会生成的app01_userinfo这张表

 

  

总结

   注意事项:
   1. 在没执行过数据库迁移命令之前, 执行了就换库.
   2. 必须要继承AbstractUser类, 且自定义字段不能与其类里面冲突
   3. 还需要到配置文件中进行声明: AUTH_USER_MODEL = '应用名.表名'

   from django.db import models
   from django.contrib.auth.models AbstractUser
   class UserInfo(AbstractUser):
        phone = models.CharField(max_length=255)
        create_time = models.DateField(auto_now_add=True)

   使用方式换汤不换药:
   from app01.models import UserInfo
   User.objects.create_user(username=username, password=password, phone=phone)    

  

 

posted @ 2023-12-01 15:40  wellplayed  阅读(7)  评论(0编辑  收藏  举报