在開發 Django 應用程式時,我們最先接觸的其中一個就是繼承 models.Model
的基本資料庫模型。雖然許多教程只是單純地跟著練習,但若能更深入地了解其結構和原理,將能更有效地發揮 Django ORM 的優勢。本文將以 Django 模型的繼承結構及定義自訂使用者模型為重點,詳細探討 Django 的模型系統是如何構成的。
models.Model:所有模型的基礎類別
在 Django 中,所有的模型類別都繼承自 models.Model
。這個 models.Model
類別正是與資料庫表格進行映射的角色。每個模型都是資料庫表,而模型的欄位則成為表格的列。這個基本類別提供的方法,正是使 Django ORM 核心功能得以實現的要素。
save()
:將物件儲存到資料庫delete()
:刪除物件objects.create()
:創建並儲存物件objects.filter()
:查詢滿足條件的物件
僅透過繼承 models.Model
就可以自由地使用 Django 的 ORM 功能。這是 Django ORM 多麼強大設計的其中一個例證。
AbstractUser 和 CustomUser:可擴展的使用者模型
Django 預設提供 auth.User
模型,但項目中對使用者模型的擴展和自訂需求是常見的。 AbstractUser
是考慮到這種擴展性而提供的 Django 抽象使用者模型。例如,當我們想要添加電子郵件欄位,或者添加電話號碼或地址等欄位時,可以使用這個模型。
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
,可以在保留 AbstractUser
功能的同時,添加自訂欄位。由於 AbstractUser
也繼承自 models.Model
,因此可以直接使用 Django ORM 的基本方法。
models.Manager 和 AbstractUserManager:資料庫查詢和使用者創建邏輯
作為模型的管理者角色,models.Manager
是一個處理對資料庫查詢的介面,通過這個名為 objects
的基本管理者,可以使用 filter()
、get()
、create()
等方法。當需要一個專門針對使用者模型的管理者時,Django 提供了 AbstractUserManager
這個管理者類別。通過此類別,可以自訂與使用者創建相關的邏輯。
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
利用這種管理者,可以靈活地應對使用者創建過程中可能出現的各種情況。AbstractUserManager
也正是從 models.Manager
擴展而來,因此包含所有基本的資料庫查詢功能。
理解 Django 模型繼承結構
理解 Django 的模型繼承結構,可以使模型的設計和實現更有效率。簡單整理如下:
models.Model
:所有 Django 模型的基類,提供與資料庫的映射及 ORM 功能。AbstractUser
:繼承自models.Model
的抽象類別。繼承它來創建CustomUser
將簡易地定義包含models.Model
功能的自訂使用者模型。AbstractUserManager
:繼承自models.Manager
的專門用於使用者創建的管理者。通過它可以輕鬆自訂使用者創建邏輯。
總之,Django 的模型結構設計得十分靈活而強大。在擴充使用者模型以增加自訂欄位時,也能藉由理解與運用 AbstractUser
和 models.Model
所提供的 ORM 功能與結構,實現更有效率且可擴展的資料庫設計。妥善利用 Django 的這種模型結構,可以讓開發者以更少的努力建構起複雜的資料庫模型。
目前沒有評論。