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

大家好 Django 模型基础和我们一起深入学习。如果你用过 Django,你就会知道模型有多么强大,但今天我们要深入基础知识、 Django 我们将探索模型的深度功能。
利用自定义管理器、抽象模型和多个数据库 阅读完这篇文章后,您就能掌握 Django 模型了!

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

从 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 模型深度:抽象模型
抽象模型可用于定义多个模型共同使用的字段。继承自抽象模型的模型将自动包含抽象模型中的字段。

类 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' # 使用单独的数据库代码评注
类 User(models.Model):元类:
- 管理用户数据Django 模型类,用于
- 它主要存储用户名和电子邮件信息。
- 主要领域有
名字:字符字段,最多可存储 100 个字符 (CharField).电子邮件:存储电子邮件地址的字段 (电子邮件字段),会自动进行验证。
db_table = 'user':
- 将数据库中要使用的表的名称设置为
用户为- 自动生成表名的默认规则 (
appname_modelname) 而不是指定的名称。使用 = '默认:
- 该模型基于 Django 项目的默认数据库 (
默认) 的例子。
类 Log(models.Model):元类:
- 管理日志数据Django 模型类,用于
- 主要领域有
行动:字符字段,最多可存储 100 个字符 (CharField),其中存储了对特定操作(如 "登录"、"注销")的描述。时戳:一个日期时间字段,用于存储操作发生的时间 (日期时间字段).
auto_now_add=True保存时间:在首次创建对象时自动保存当前时间。
db_table = 'log':
- 将数据库中要使用的表的名称设置为
'日志为using = 'logs_db':
- 该模型使用
日志数据库人称 独立的数据库以使用- 项目配置文件 (
settings.py)中的日志数据库必须定义。
总结
现在,您已经了解了 Django 模型的深层功能,应该能够更有效地使用它们了。 如果您还有其他问题,请在评论中留言。让我们一起学习吧
# 术语表
- 自定义管理器自定义管理器,只允许检索符合特定条件的数据。
- 抽象模型定义了多个模型通用字段的模型。
- 多个数据库在一个应用程序中同时使用多个数据库的技术。






