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

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

原文地址:https://www.cnblogs.com/bladecheng/p/11565076.html

时间: 2024-10-08 11:56:15

Django - 继承原生user表遇到的问题处理的相关文章

django继承修改 User表导致的问题

扩展默认的auth_user表参考: http://www.cnblogs.com/liwenzhou/p/9030211.html#undefined django继承修改 User表时,python  manage.py  makemigrations进行python  manage.py  migrate操作时会导致的问题如图: 根源:django文档中有注明: Due to limitations of Django’s dynamic dependency feature for sw

Django解决扩展用户表时,后台Admin显示密码为明文的问题

小生博客:http://xsboke.blog.51cto.com 如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论). -------谢谢您的参考,如有疑问,欢迎交流 Django解决当扩展用户表时,用户继承AbstractUser后,后台Admin会显示密码为明文的问题 先看项目列表 1.今天在写一个扩展Django默认的用户表功能时,遇到了一个问题.先给大家看一下我写的,扩展用户表的models[apps.users.models],我是通过继承Abstr

Django继承drf的user模型的demo

1.安装虚拟环境 #mkvirtualenv drfdemo -p python3 #pip install django #pip install djangorestframework #pip install pymysql 2.创建项目 django-admin startproject myuser 3.添加drf应用 在settings.py的INSTALLED_APPS中添加'rest_framework'. INSTALLED_APPS = [ ... 'rest_framewo

django之重构用户表

一.django自定义用户表格式(3.0.0) 数据库: Model类: class AbstractUser(AbstractBaseUser, PermissionsMixin): """ An abstract base class implementing a fully featured User model with admin-compliant permissions. Username and password are required. Other fie

MVC扩展ModelBinder,通过继承DefaultModelBinder把表单数据封装成类作为action参数

把视图省.市.街道表单数据,封装成一个类,作为action参数.如下: action方法参数类型: namespace MvcApplication1.Models{    public class Customer    {        public string Address { get; set; }    }} 在自定义ModelBinder中,接收视图表单数据,封装成Customer类. using System.Web; using System.Web.Mvc; using M

django使用django.db模块创建表

1.创建一个django项目,叫djangodb_demo 2.使用mysql数据库 2.在djangodb_demo项目下面再创建一个叫web的app 3.在web下新建一个models.py的文件 from django.db import models class UserInfo(models.Model):          username = models.CharField(maxlength=50)          password = models.CharField(ma

# Django admin、form表单的应用记录

目录 Django admin.form表单的应用记录 一 Django admin 1. 使用介绍 form组件使用 1. form的作用 2. form组件生成HTMKL代码 3. form组件校验数据有效性 3. form组件如何给html标签设置默认值 Django admin.form表单的应用记录 一 Django admin 1. 使用介绍 1. 创建超级用户 python manage.py createsuperuser username: wph password: 1231

django多对多中间表详解

我们都知道对于ManyToMany字段,Django采用的是第三张中间表的方式.通过这第三张表,来关联ManyToMany的双方.下面我们根据一个具体的例子,详细解说中间表的使用. 一.默认中间表 首先,模型是这样的: class Person(models.Model): name = models.CharField(max_length=128) def __str__(self): return self.name class Group(models.Model): name = mo

django使用原生SQL的方法

django使用原生SQL的方法 使用extra: models.Book.objects.filter(publisher__name='传说中的申小五').extra(where=['price>50'])models.Book.objects.filter(publisher__name='传说中的申小五', price__gt=50)?models.Book.objects.extra(select={'count': 'select count(*) from hello_Book'}