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的模型系統。
目前沒有評論。