Django - 继承原生user表遇到的问题处理

本文详细介绍了在Django项目中如何通过继承内置User模型来自定义用户表,包括添加额外字段、配置密码显示方式、解决后台管理界面字段显示问题以及确保迁移文件正确性的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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表的同时,就能在后台管理页面添加字段,并且密码密文显示啦

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 操作即可成功。

1580025-20190911143144828-1122476808.png

转载于:https://www.cnblogs.com/863652104kai/p/11505034.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值