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表的同時,就能在後臺管理頁面添加字段,而且密碼密文顯示啦python
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 操做便可成功。
<img src="https://img2018.cnblogs.com/blog/1580025/201909/1580025-20190911143144828-1122476808.png" />數據庫