深入了解 Django 模型:掌握高级功能和实际用途

Django Models 심화 기능 참고 이미지1

大家好 Django 模型基础和我们一起深入学习。如果你用过 Django,你就会知道模型有多么强大,但今天我们要深入基础知识、 Django 我们将探索模型的深度功能。

利用自定义管理器、抽象模型和多个数据库 阅读完这篇文章后,您就能掌握 Django 模型了!

Django Models 심화 기능 참고 이미지1

1. Django 模型深度:自定义管理器

除了 Django 默认提供的管理器外,自定义管理器还能让您更灵活地检索数据。例如,让我们创建一个只检索满足特定条件的数据的管理器。

커스텀 매니저(Custom Manager) 이미지
从 django.db 导入模型

类 PublishedManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(status='published')

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    status = models.CharField(max_length=10, choices=[('draft', 'Draft'), ('published', 'Published')])

    objects = models.Manager() # 默认管理器
    published = PublishedManager() # 自定义管理器

    def __str__(self):
        return self.title

代码评注

  • 类 PublishedManager(models.Manager):
    • 姜戈的 经理来定义自定义管理器类。
    • 该类旨在允许您对数据库查询应用特定条件,并返回自定义查询集。
  • def get_queryset(self):
    • get_queryset 方法负责返回查询集。
    • return super().get_queryset().filter(status='published')
      • 默认查询集 (super().get_queryset()) 添加一个过滤器到 地位 如果字段值为 已出版设置为只查询
      • 这种方法允许您使用 已出版 您可以选择性地只管理一个状态中的数据。
  • objects = models.Manager()
    • 定义模型的默认管理器。
    • 物件提供了一个包含所有数据的默认查询集。
    • 它可与自定义管理器一起使用,为查看模型中的数据提供更多方法。
  • published = PublishedManager()
    • 将自定义管理器连接到模型,创建一个 status='published 定义一个管理器,该管理器会返回一个已应用条件的查询集。
    • 该管理器允许您使用 Post.published.all()轻松查找符合特定条件的数据。
  • 类 Post(models.Model):
    • 管理博客文章的模型类。
    • 主要领域有
      • 标题:帖子标题 (CharField),最大长度为 200 个字符。
      • 内容存储帖子正文内容的字段 (文本字段).
      • 地位员额状态 (草案已出版)来存储 选择 可选择限制可能的值。
  • def __str__(self):
    • 用字符串表示对象时,可以使用帖子的标题 (标题) 返回。
    • 例如,在 Django 管理页面或 shell 中,可以使用 职位 输出对象时,会显示一个标题。

2. Django 模型深度:抽象模型

抽象模型可用于定义多个模型共同使用的字段。继承自抽象模型的模型将自动包含抽象模型中的字段。

추상 모델(Abstract Model) 이미지
类 TimeStampedModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    类 元:
        抽象 = True

类 Post(TimeStampedModel):
    title = models.CharField(max_length=200)
    content = models.TextField()

    def __str__(self):
        return self.title

代码评注

  • 类 TimeStampedModel(models.Model)定义一个抽象模型类。
  • created_at = models.DateTimeField(auto_now_add=True):自动保存模型创建的时间。
  • updated_at = models.DateTimeField(auto_now=True):自动保存模型更新的时间。
  • 类 元: 抽象 = True:声明该模型是一个抽象模型。
  • 类 Post(TimeStampedModel): 时间戳模型继承自 职位 定义模型。

3. 深化 Django 模型:利用多个数据库

Django 可以同时使用多个数据库。例如,您可以拥有一个只读数据库和一个只写数据库。

类 User(models.Model):
    name = models.CharField(max_length=100)
    电子邮件 = models.EmailField()

    类 元
        db_table = 'user
        using = 'default' 使用 # 默认数据库

类 Log(models.Model):
    action = models.CharField(max_length=100)
    timestamp = models.DateTimeField(auto_now_add=True)

    类元:
        db_table = 'log
        using = 'logs_db' # 使用单独的数据库

代码评注

  1. 类 User(models.Model):
    • 管理用户数据Django 模型类,用于
    • 它主要存储用户名和电子邮件信息。
    • 主要领域有
      • 名字:字符字段,最多可存储 100 个字符 (CharField).
      • 电子邮件:存储电子邮件地址的字段 (电子邮件字段),会自动进行验证。
    元类:
    • db_table = 'user':
      • 将数据库中要使用的表的名称设置为 用户
      • 自动生成表名的默认规则 (appname_modelname) 而不是指定的名称。
    • 使用 = '默认:
      • 该模型基于 Django 项目的默认数据库 (默认) 的例子。

  1. 类 Log(models.Model):
    • 管理日志数据Django 模型类,用于
    • 主要领域有
      • 行动:字符字段,最多可存储 100 个字符 (CharField),其中存储了对特定操作(如 "登录"、"注销")的描述。
      • 时戳:一个日期时间字段,用于存储操作发生的时间 (日期时间字段).
        • auto_now_add=True保存时间:在首次创建对象时自动保存当前时间。
    元类:
    • db_table = 'log':
      • 将数据库中要使用的表的名称设置为 '日志
    • using = 'logs_db':
      • 该模型使用 日志数据库人称 独立的数据库以使用
      • 项目配置文件 (settings.py)中的 日志数据库必须定义。

总结

现在,您已经了解了 Django 模型的深层功能,应该能够更有效地使用它们了。 如果您还有其他问题,请在评论中留言。让我们一起学习吧

# 术语表

  1. 自定义管理器自定义管理器,只允许检索符合特定条件的数据。
  2. 抽象模型定义了多个模型通用字段的模型。
  3. 多个数据库在一个应用程序中同时使用多个数据库的技术。

类似文章