models.Model的角色
首先,Django中最基本的模型類是 models.Model
。所有Django模型都是繼承自 models.Model
來定義的。這個類的作用是將我定義的模型映射為數據庫表。每一個模型類都是數據庫中的 表,其中的字段則是表的 列(columns)。
重要的是通過繼承 models.Model
能夠獲得多個有用的方法:
save()
:將對象保存到數據庫的方法delete()
:刪除對象的方法objects.create()
:創建並保存新對象的方法objects.filter()
:查詢滿足特定條件的對象的方法
得益於這些功能,只要繼承 models.Model
,就能輕鬆使用Django ORM的強大功能。
AbstractUser和CustomUser的關係
Django有一個內建的用戶模型 auth.User
。雖然可以直接使用這個模型,但大多數情況下用戶模型會希望進行定制。例如,想要加入電話號碼或地址等額外字段時。
此時可以使用 AbstractUser
。這個類是Django提供的用戶模型(即 auth.User
)的擴展用抽象類。AbstractUser
同樣繼承自 models.Model
,因此當我繼承 AbstractUser
來定義 CustomUser
時,可以直接使用ORM的所有功能。
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone_number = models.CharField(max_length=15, blank=True)
address = models.CharField(max_length=255, blank=True)
這樣定義的 CustomUser
模型在提供用戶認證相關所有功能的同時,還能自由定義額外字段。
models.Manager和AbstractUserManager的角色
在Django模型中, models.Manager
扮演著處理數據庫查詢接口的角色。通過基本提供的 objects
管理器,可以輕鬆查詢或操作數據。例如有 filter()
、get()
、create()
等方法。
當用戶模型需要用戶創建邏輯時,可以使用 AbstractUserManager
。AbstractUserManager
繼承自 models.Manager
,並提供專門針對用戶創建的特化方法(create_user()
、create_superuser()
)。
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# 用戶創建邏輯
pass
def create_superuser(self, email, password=None, **extra_fields):
# 超級用戶創建邏輯
pass
透過自訂的用戶創建邏輯來實現 CustomUserManager
,使得用戶模型管理更具靈活性。
整理:模型類之間的關係
到目前為止,Django的模型類之間的關係可以總結如下:
models.Model
:所有Django模型的基礎類。通過繼承將數據庫與模型映射並提供ORM功能。AbstractUser
:繼承自models.Model
的抽象類,通過擴展來定義CustomUser
。AbstractUserManager
:繼承自models.Manager
,可對用戶創建邏輯進行定制。
了解並利用這一結構,可以更有效地設計Django的模型系統。
Add a New Comment