1. 程式人生 > >重寫用戶模型

重寫用戶模型

del history 第一次運行 依賴 外鍵關聯 遇到 全部 field ups

我們在設計models數據庫的用戶管理會用到各種各種字段,比如用戶名,密碼,用戶登錄狀態等,這些字段如果自己來寫的話相當麻煩,這時候可以用django系統自動生成的user表。

來看auth_user的表結構:

技術分享圖片

但是想要在django內建的User模型不一定適合你的需求。django允許你通過 AUTH_USER_MODEL 設置 覆蓋User模型。

AUTH_USER_MODEL = "myapp.MyUser"

上面的值表示Django 應用的名稱(必須位於 INSTALLED_APPS 中) 和你想使用的User 模型的名稱。

改變 AUTH_USER_MODEL 對你的數據庫結構有很大的影響。它改變了一些會使用到的表格,並且會影響到一些外鍵和多對多關系的構造。如果你打算設置 AUTH_USER_MODEL , 你應該在創建任何遷移或者第一次運行manage.py migrate 前設置它。

錯誤提示:

如果你在遷徙的過程中出現以下兩種錯誤,那麽恭喜你

錯誤一、

auth.User.groups: (fields.E304) Reverse accessor for User.groups clashes

請檢查是否在項目中配置

settings.py

AUTH_USER_MODEL = myapp.MyUser

錯誤二、

django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency user.0001_initial on database 
default

請將系統自動生成的auth_user表刪除,這是因為Django中有一個原生的User模型類,admin的模型依賴這個模型類,由於前面一個應用中的模型類User繼承了AbstractUser類。

但是在刪除auth_user的時候你可能會遇到外鍵關聯等問題導致auth_user不能刪除的問題,那麽請將系統自動生成的表全部刪除。

技術分享圖片

(將所有表刪除)

在後續的遷移過程中,這些表都會重新建立。

重寫用戶模型