Django - 继承原生user表遇到的问题处理]
1. 继承user表设置
# models.py文件 from django.contrib.auth.models import AbstractUser class User(AbstractUser): mobile = models.CharField(max_length=11) class Meta: db_table = 'new_user' verbose_name = '用户' verbose_name_plural = verbose_name def __str__(self): return self.username # settings.py配置 AUTH_USER_MODEL = 'app.User' # admin.py注册 from django.contrib import admin from . import models admin.site.register(models.User)
2. 在继承user表后,在后台管理页面输入的密码变成明文,且存入数据库中的密码也是明文,致使密码校验错误
# admin.py文件中 from django.contrib import admin from django.contrib.auth.admin import UserAdmin from . import models admin.site.register(models.User,UserAdmin) # 这样设置后,后台管理页面添加用户密码就变成明文输入了,可是又出现问题2:不能添加自定义的字段
3. 在继承的同时增长了字段,如mobile字段。在后台管理页面添加用户时,没有添加该字段的地方
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from . import models class MyUserAdmin(UserAdmin): # 修改页面显示全部字段 fieldsets = () # 增长页面显示电话mobile add_fieldsets = ( (None,{ 'classes':('wide',), 'fields':('username','password1','password2','mobile'), }), ) # 格式化用户首页列表信息 list_display = ('username','email','is_staff','mobile') admin.site.register(models.User,MyUserAdmin)
这样在继承原生user表的同时,就能在后台管理页面添加字段,而且密码密文显示啦python
4. 所以若是涉及到修改用户表,必定要保证用户表的migration编号是0001_,不然会有依赖性问题。像上面修改了用户表,下次想要使用原生的user表就只能:
1)删除数据库,清除文件夹中的migrations文件夹 文件夹路径: python3/lib/sit-packages/django/contrib/admin/migrations python3/lib/sit-packages/django/contrib/auth/migrations 中的文件删除(除了__init__.py文件) 2)再执行 python manage.py makemigrations 和 python manage.py migrate 操做便可成功。
<img src="https://img2018.cnblogs.com/blog/1580025/201909/1580025-20190911143144828-1122476808.png" />数据库