Django自定义用户模型

2021-09-09 16:29:00 浏览数 (1)

Django自定义用户模型

Django带有一个admin功能,这意味着Django默认是有用户管理类的。这点也可以从Django默认生成的表中看到。如下:

代码语言:javascript复制
mysql> SHOW TABLES;
 ---------------------------- 
| Tables_in_kylin_ksrcdb     |
 ---------------------------- 
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| captcha_captchastore       |

一般情况下,我们实现自定义用户模型的时候,都会从AbstractUser继承。然后实现我们自定义的用户模型。例如:

代码语言:javascript复制
from django.db import models
from django.contrib.auth.models import AbstractUser     # 导入AbstractUser

# Create your models here.


class Users(AbstractUser):
    ...
    class Meta:
    db_table = 'xxxx'           # 这里最好起一个和Django默认表不同的名字
    verbose_name = '用户管理'
    verbose_name_plural = verbose_name

这样,model就定义完成了,现在就可以生成迁移文件,执行迁移了。

代码语言:javascript复制
python3 manage.py makemigrations
python3 manage.py migrate

你就会发现migrate报错了。错误如下:

代码语言:javascript复制
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency users.0001_initial on database 'default'.

解决方案

代码语言:javascript复制
1. 注释掉项目的setting.py文件中INSTALLED_APPS列表中的'django.contrib.admin'
2. 同时需要注释掉项目的urls.py中的urlpatterns列表中的path('admin/', admin.site.urls)
3. 执行migrate,发现不会报错了。
4. 将前面注释掉的改回来即可。
5. 执行runserver,发现项目可以成功运行

以上就是自定义用户模型可能遇到的问题以及解决方案。

0 人点赞