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,发现项目可以成功运行
以上就是自定义用户模型可能遇到的问题以及解决方案。