1. 程式人生 > 實用技巧 >django中如果不是第一次遷移的時候就配置AUTH_USER_MODEL(用來告知django認證系統識別我們自定義的模型類),那麼該如何解決才能讓django的認證系統識別且不會報未知錯誤?

django中如果不是第一次遷移的時候就配置AUTH_USER_MODEL(用來告知django認證系統識別我們自定義的模型類),那麼該如何解決才能讓django的認證系統識別且不會報未知錯誤?

Django認證系統中提供的使用者模型類及方法很方便,我們可以使用這個模型類,但是欄位有些無法滿足專案需求,如還需要儲存使用者的手機號,需要給模型類新增額外的欄位。

Django提供了django.contrib.auth.models.AbstractUser使用者抽象模型類允許我們繼承,擴充套件欄位來使用Django認證系統的使用者模型類。

我們可以在apps中建立Django應用users,並在配置檔案中註冊users應用。

在建立好的應用models.py中定義使用者的使用者模型類。

from django.contrib.auth.models import AbstractUser
"""不繼承django提供的User,繼承它的父類AbstractUser"""
class User(AbstractUser):
    """使用者模型類"""
    mobile = models.CharField(max_length=11, unique=True, verbose_name='手機號')

    class Meta:
        db_table = 'ly_users'
        verbose_name = '使用者'
        verbose_name_plural = verbose_name

我們自定義的使用者模型類還不能直接被Django的認證系統所識別,需要在配置檔案中告知Django認證系統使用我們自定義的模型類。
在配置檔案中進行設定

      AUTH_USER_MODEL = 'users.User'
      引數的設定以`點.`來分隔,表示`應用名.模型類名`

注意:Django建議我們對於AUTH_USER_MODEL引數的設定一定要在第一次資料庫遷移之前就設定好,否則後續使用可能出現未知錯誤。
不是第一次遷移的時候就配置AUTH_USER_MODEL的解決辦法:

0. 先把現有的資料庫匯出備份,然後清掉資料庫中所有的資料表。選中表,右鍵Dump Data to File->SQL Inserts,即可匯出sql語句
1. 把開發者建立的所有子應用下面的migrations目錄下除了__init__.py以外的所有遷移檔案,只要涉及到使用者的,一律刪除
2. 把django.contrib.admin.migrations目錄下除了__init__.py以外的所有遷移檔案,全部刪除。
3. 把django.contrib.auth.migrations目錄下除了__init__.py以外的所有遷移檔案,全部刪除。
4. 把reversion.migrations目錄下除了__init__.py以外的所有遷移檔案,全部刪除。
5. 把xadmin.migrations目錄下除了__init__.py以外的所有遷移檔案,全部刪除。
6. 接下來,執行資料遷移,回顧第0步中的資料,以後如果要修改使用者相關資料,不需要重複本次操作,直接資料遷移即可。
7.把匯出的sql語句重新插入到表中,