如何在 Django 中建立抽象模型類?
我們將學習如何在 Django 中建立抽象模型類。
在 Django 中,抽象模型類是一種用作其他模型繼承的模板的模型,而不是旨在建立或儲存到資料庫的模型。在一個應用程式中,可以使用抽象模型來定義多個模型共享的類似欄位和行為。使用 Django,您可以定義一個從 Django.db.models 派生的模型類來建立一個抽象模型類。
模型並將抽象屬性設定為 True。此抽象類的屬性和方法將被從中派生的任何模型繼承,但不會建立新的資料庫表。
抽象模型可以像標準模型一樣定義欄位、方法和元資料。Django 提供的許多欄位類,包括 CharField、IntegerField 和 ForeignKey,都可以用來描述欄位。可以建立方法來實現特定行為,例如計算屬性、自定義查詢或驗證。
在 Django 中,從抽象模型繼承遵循與常規模型相同的準則。所有在超類中宣告的欄位和方法都將被子類繼承,子類可以根據需要替換或新增它們。在開發從抽象模型派生的新模型時,不應將抽象屬性設定為 True。
要在 Django 應用程式中使用抽象模型,它必須是已安裝應用程式的一部分,並且必須透過執行所需的遷移來建立任何新的資料庫表或欄位。
建立抽象模型類的步驟
步驟 1 - 設定一個從 django.db.models 繼承的新類。您的抽象模型類使用模型。此類可以使用您喜歡的任何名稱,但最好使用準確描述它在應用程式中作用的名稱。
步驟 2 - 提供任何您的具體模型應從抽象模型類繼承的屬性或標準欄位。這可以包括您希望所有模型都具有的任何自定義方法或屬性,以及 CharField、DateField、TextField 等欄位。
步驟 3 - 您的抽象模型類應該新增一個 Meta 內部類,並將抽象屬性設定為 True。這會通知 Django 這是一個抽象模型類,因此不應為其建立單獨的資料庫表。
步驟 4 - 從您的抽象模型類提供具體模型類。每個具體模型的額外變數和操作可以根據需要定義。
步驟 5 - 執行遷移以構建您的具體模型所需的資料庫表。
透過構建抽象模型類,您可以指定應用程式中各種模型共享的標準欄位和行為。增加程式碼的重用並避免重複可以幫助您編寫更易於維護的程式碼。
示例 1
在此示例中,我們將建立一個 Django 中的抽象模型類並使用它來更好地理解它。在 models.py 檔案中,我們首先建立名為“AbstractTimestampedModel”的抽象類,它包含兩個名為“created_at”和“updated_at”的欄位。預設情況下,如果未提及任何內容,這些欄位值將填充當前時間。我們建立了另一個名為“ArticleModel”的模型,它在引數中獲取抽象模型並使用這些欄位。它包含兩個欄位,“name”和“author”。
From django.db import models
class AbstractTimestampedModel(models.Model):
# Time when the record is created
created_at = models.DateTimeField(auto_now_add=True)
# Time when the record is updated
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class ArticleModel(AbstractTimestampedModel):
# name of the article
name = models.TextField()
# author of the article
author = models.TextField()
class Meta:
db_table = 'myapp_articlemodel'
建立這兩個類後,我們需要執行以下命令:
python manage.py makemigrations python manage.py migrate python manage.py shell
然後,我們需要執行命令在資料庫中新增記錄並列印其值。透過以下命令建立記錄:
>>> from myapp.models import ArticleModel >>> article = ArticleModel(name='Tutorialspoint Article', author='ABC XYZ') >>> article.save()
之後,我們需要透過以下命令列印插入記錄的值:
>>> from myapp.models import ArticleModel
>>> article = ArticleModel.objects.first()
>>> print("Article name: ", article.name, "\nAuthor: ", article.author, "\nCreated At: ", article.created_at, "\nUpdated At: ", article.updated_at)
輸出

示例 2
在此示例中,我們使用類似的方法建立抽象模型,但這裡我們在兩個單獨的模型中使用相同的抽象模型。抽象模型名稱為“AbstractUserModel”,它儲存使用者的姓名和出生日期。我們的兩個模型是“StudentModel”和“EmployeeModel”。StudentModel 有一個 rolling 欄位,而 EmployeeModel 有一個 employeeNo 欄位。
from django.db import models
class AbstractUserModel(models.Model):
name = models.TextField()
dob = models.TextField()
class Meta:
abstract = True
class StudentModel(AbstractUserModel):
roll = models.IntegerField()
class Meta:
db_table = 'myapp_studentmodel'
class EmployeeModel(AbstractUserModel):
employeeNo = models.IntegerField()
class Meta:
db_table = 'myapp_employeemodel'
必須執行相同的步驟來遷移這些資料庫模型。執行這些步驟後,請執行以下操作以建立和列印記錄。
>>> from myapp.models import StudentModel,EmployeeModel
>>> student = StudentModel(name='ABC Student', dob='01/01/2023', roll=123)
>>> student.save()
>>> employee = EmployeeModel(name='XYZ Employee', dob='12/12/2023', employeeNo=111)
>>> employee.save()
>>>
>>> student = StudentModel.objects.first()
>>> employee = EmployeeModel.objects.first()
>>>
>>> print("Name: ", student.name, "\nDOB: ", student.dob, "\nRoll: ", student.roll)
>>> print("Name: ", employee.name, "\nDOB: ", employee.dob, "\nEmployee No: ", employee.employeeNo)
輸出

資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP