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表的同時,就能在後臺管理頁面添加字段,而且密碼密文顯示啦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" />數據庫

相關文章
相關標籤/搜索