Django 如何创建抽象模型类

Django 如何创建抽象模型类

我们将了解如何在Django中创建抽象模型类。

在Django中, 抽象模型类 是一个用作其他模型继承模板的模型,而不是用于创建或保存到数据库的模型。在应用程序中,可以使用抽象模型定义多个模型共享的类似字段和行为。使用 Django ,您可以定义一个从 Django.db.models 派生的模型类来建立一个抽象模型类。

定义一个模型类并将abstract属性设置为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)

输出

Django 如何创建抽象模型类

示例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)

输出

Django 如何创建抽象模型类

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程