• Django


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

    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 操作即可成功。
    
  • 相关阅读:
    在插入一条记录后 取得自动增长ID
    hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些
    单例模式
    聚簇索引与非聚簇索引的区别
    基于SQL SERVER2008的SCCM2007部署
    XML架构下的表结构设置主键
    IE6与IE7下一点样式的区别
    Session丢失原因与解决方案小结
    Python_如何去除字符串里的空格
    Python_让人脑阔疼的编码问题(转)+(整理)
  • 原文地址:https://www.cnblogs.com/bladecheng/p/11565076.html
Copyright © 2020-2023  润新知