前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在 Django 中创建抽象模型类?

如何在 Django 中创建抽象模型类?

作者头像
很酷的站长
发布2023-08-11 15:05:55
2130
发布2023-08-11 15:05:55
举报
文章被收录于专栏:站长的编程笔记
我们将学习如何在 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”的模型,该模型在参数中获取抽象模型并使用这些字段。它包含两个字段,“名称”和“作者”。

代码语言:javascript
复制
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'

创建这两个类后,我们需要运行以下命令 -

代码语言:javascript
复制
python manage.py makemigrations python manage.py migrate python manage.py shell

然后我们需要运行命令以在数据库中添加记录并打印其值。通过以下命令创建记录 -

代码语言:javascript
复制
>>> from myapp.models import ArticleModel                                                                             >>> article = ArticleModel(name='Tutorialspoint Article', author='ABC XYZ') >>> article.save()

之后,我们需要通过以下命令打印插入记录的值 -

代码语言:javascript
复制
>>> 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 有一个 employeeNo 字段。

代码语言:javascript
复制
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'

迁移这些数据库模型必须执行相同的步骤。执行这些步骤后,执行以下操作以创建和打印记录。

代码语言:javascript
复制
>>> 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)

输出

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建抽象模型类的步骤
    • 例 1
      • 输出
        • 例 2
          • 输出
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档