1. 程式人生 > >auth模組的 資料遷移的問題 auth.User.groups: (fields.E304)

auth模組的 資料遷移的問題 auth.User.groups: (fields.E304)

這內建的認證系統這麼好用,但是auth_user表字段都是固定的那幾個,我在專案中沒法拿來直接使用啊!

比如,我想要加一個儲存使用者手機號的欄位,怎麼辦?

聰明的你可能會想到新建另外一張表然後通過一對一和內建的auth_user表關聯,這樣雖然能滿足要求但是有沒有更好的實現方式呢?

答案是當然有了。

我們可以通過繼承內建的 AbstractUser 類,來定義一個自己的Model類。

這樣既能根據專案需求靈活的設計使用者表,又能使用Django強大的認證系統了。

 

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    """
    使用者資訊表
    """
    nid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, null=True, unique=True)
    
    def __str__(self):
        return self.username

 

注意:

按上面的方式擴充套件了內建的auth_user表之後,一定要在settings.py中告訴Django,我現在使用我新定義的UserInfo表來做使用者認證。寫法如下:

# 引用Django自帶的User表,繼承使用時需要設定
AUTH_USER_MODEL = "app名.UserInfo"

再次注意:

一旦我們指定了新的認證系統所使用的表,我們就需要重新在資料庫中建立該表,而不能繼續使用原來預設的auth_user表了。