在Django中创建抽象模型类的方法?

在Django中创建抽象模型类的方法?

本篇文章将介绍如何在Django中创建抽象模型类。

在Django中, 抽象模型类 是指一个不属于具体模型,而是作为其他模型的模板进行继承的模型。在应用程序中,可以使用抽象模型定义多个模型共享的字段和行为。使用Django时,需要定义一个由 Django.db.models 派生的模型类来建立抽象模型类。

Model 定义一个模型类,并将抽象属性设置为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”。

从django.db导入模型

类AbstractTimestampedModel(models.Model):
   #记录创建时间
   created_at = models.DateTimeField(auto_now_add=True)
  #记录更新时间
   updated_at = models.DateTimeField(auto_now=True)

   class Meta:
      abstract = True

class ArticleModel(AbstractTimestampedModel):
   #文章名称
   name = models.TextField()
   #文章作者
   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具有滚动字段,而EmployeeModel具有employeeNo字段。

从django.db导入模型

类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中创建抽象模型类的方法?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程