一. 重写用户模型类models.py
- blank=True 必填字段下设置成非必填字段
- default= 设置默认值
- choices= 枚举,设置前端的选填按钮
- models.ForeignKey 外键字段,关联另一个表
- to=关联的表, to_field=关联表的唯一字段, on_delete=models.SET_NULL 如果关联的表进行删除操作,SET则是改为空NULL
- db_constraint=False 关闭外键数据库功能,保留查询功能
- related_name='collects_to_articles' 提供重新定义反向查询的名字
- 查询演示: collect = articles.collects_to_articles.all().first()
- notebook = user.notebook_set.all().first() 反向查询如果不重新定义查询的名字,默认查询的类名(小写)拼接(_set)
- 查询演示:
- articles = Articles.objects.filter(title='django').first() 反向查询关联列表
- collect = articles.collects_to_articles.all().first()
from django.contrib.auth.models import AbstractUser # 用户类导包 《一定要继承这个用户类》
from django.db import models
from django.contrib.auth.models import AbstractUser # 用户类导包
# from article.models import Articles
# 用户头像关联类/外键
class Avatar(models.Model):
id = models.AutoField(primary_key=True)
url = models.ImageField(verbose_name='图片路径', upload_to='avatar/')
class Meta:
db_table = 'tb_avatar'
verbose_name = '用户头像'
verbose_name_plural = verbose_name
# 用户表
class UserInfoModels(AbstractUser):
id = models.AutoField(primary_key=True)
nike_name = models.CharField(max_length=16, verbose_name='昵称', default='')
account_status = models.SmallIntegerField(verbose_name='账号状态', default=0, choices=(
(0, '正常'), (1, '异常'), (2, '封禁')
))
sign_status = models.SmallIntegerField(verbose_name='注册方式', default=0, choices=(
(0, '用户名注册'), (1, '手机号注册'), (2, '邮箱注册'), (3, 'QQ注册')
))
tel = models.IntegerField(verbose_name='手机号', default=0, blank=True)
token = models.CharField(verbose_name='token',
max_length=64, default='', blank=True)
unique_id = models.CharField(
verbose_name='平台唯一ID', max_length=64, default='')
avatar = models.ForeignKey(
to=Avatar, to_field='id', on_delete=models.SET_NULL, blank=True, null=True, verbose_name='用户头像', db_constraint=False
)
collects = models.ManyToManyField(
to='article.Articles', verbose_name='收藏的文章', related_name='collects_to_articles', db_constraint=False, blank=True
)
# 继承模型类内嵌套类
class Meta:
db_table = 'tb_user' # 表名称
verbose_name = '用户列表' # 后台显示对应名称
verbose_name_plural = verbose_name # plural复数显示,中文无区别
# 后台显示数据,魔法方法,运行print打印方法的时候触发
def __str__(self) -> str:
return self.username
二. 配置settings.py 定义新的用户表
AUTH_USER_MODEL = 'user.UserInfoModels'