深入Django(二)

简介: 本文介绍了Django的模型(Models)系统,它是Django框架中处理数据库的核心部分。模型是通过Python类定义的,对应数据库中的表,属性代表表的字段。通过模型,可以方便地操作数据,如创建、查询、更新和删除记录。文中展示了如何创建`Author`和`Post`模型,以及如何使用ORM进行对象操作。此外,还提到了模型的高级特性,如字段选项、字段类型、关系以及自定义方法和属性,这些都是Django高效管理数据的关键。理解模型对于Django应用开发至关重要。

Django模型(Models)系统

引言

在昨天的博客中,我们成功搭建了Django开发环境并运行了第一个项目。今天,我们将深入Django的核心——模型(Models)系统。模型是Django中用于定义数据库表的对象,它们是MVC架构中的“M”部分。

什么是Django模型?

Django模型是一个Python类,它继承自django.db.models.Model。每个模型类对应数据库中的一个表,模型的属性对应表的字段。Django的模型系统提供了一个高级的抽象层,让你可以用Python代码来操作数据库。

创建模型

让我们创建一个简单的博客应用程序,其中包含文章和作者两个模型。

  1. 定义模型:在你的Django应用目录下,找到models.py文件,并定义你的模型。
  2. from django.db import modelsclass Author(models.Model):    name = models.CharField(max_length=100)    email = models.EmailField()     def __str__(self):        return self.nameclass Post(models.Model):    title = models.CharField(max_length=200)    content = models.TextField()    author = models.ForeignKey(Author, on_delete=models.CASCADE)    published_date = models.DateTimeField(auto_now_add=True)     def __str__(self):        return self.title
  3. 在这个例子中,Author模型有两个字段:name和email。Post模型有四个字段:title、content、author和published_date。author字段是一个外键,它指向Author模型,表示一个文章属于一个作者。
  4. 激活模型:创建模型后,你需要告诉Django这些模型应该被创建在数据库中。这通过运行以下命令完成:
  5. python manage.py makemigrationspython manage.py migrate
  6. makemigrations命令会检查你对模型的更改,并为这些更改创建迁移文件。migrate命令应用这些迁移到数据库。

使用模型

模型不仅仅是数据库表的抽象,它们还提供了丰富的方法来操作数据。

  1. 创建对象:你可以使用模型类来创建新的数据库记录。
  2. from myapp.models import Authorauthor = Author(name='John Doe', email='john@example.com')author.save()
  3. 查询对象:Django的ORM提供了强大的查询API来检索数据库中的数据。
  4. from myapp.models import Post# 获取所有文章posts = Post.objects.all()# 获取特定作者的文章john_posts = Post.objects.filter(author__name='John Doe')# 获取最新文章latest_post = Post.objects.latest('published_date')
  5. 更新和删除对象:同样,你可以更新或删除数据库中的记录。
  6. # 更新文章内容post = Post.objects.get(id=1)post.content = 'New content'post.save()# 删除文章post.delete()

模型的高级特性

Django模型提供了许多高级特性,可以帮助你更有效地管理数据。

  • 字段选项:每个字段类型都有多种选项,比如max_length、null、blank等,这些选项可以控制字段的行为。
  • 字段类型:Django提供了多种字段类型,如CharField、IntegerField、DateField等,以适应不同的数据需求。
  • 关系:Django支持多种类型的关系,包括一对一、一对多和多对多。
  • 方法和属性:你可以在模型中定义方法和属性,这些方法和属性可以被序列化,用于表单验证等。

总结

在今天的教程中,我们学习了Django模型的基础知识,包括如何定义模型、激活模型、使用模型进行数据的创建、查询、更新和删除,以及模型的一些高级特性。模型是Django应用程序中数据管理的核心,理解模型对于构建任何Django应用程序都是至关重要的。

相关文章
|
算法 Java 机器人
手把手教你提交Jar包到Maven公共仓库
在上一篇文章中,我介绍了自己的SpringBoot Starter项目,可以让我们使用注解的方式轻松地获取操作日志,并推送到指定数据源。 之前,我的项目开源在Github上,大家想要用我的项目,还得把Github仓库配置到Maven的Setting.xml里,一点也不方便。 本文,就整理一下我把项目上传到公共Maven仓库的过程,当做一篇教程文章。
3079 0
|
2月前
|
JSON 缓存 API
#免费空气质量查询接口推荐:含 AQI、PM2.5 实时数据
本文实测整理了4个当前可用的免费空气质量接口:万维易源(官方、指标全、需appKey)、sojson(免注册免key、适合快速原型)、AQICN(全球覆盖、需免费token)、天行/易客云(需注册key)。含调用方式、字段对比与选型建议,助开发者高效接入AQI、PM2.5等实时数据。
963 0
|
4月前
|
人工智能 自然语言处理 运维
深入解析Token节流机制:用户维度 + 场景维度 + 频率限制的大模型降本方案.155
本文系统阐述大模型Token精细化管控体系,涵盖Token定义、拆分规则、成本关联及三大管控维度(场景分层、用户配额、频率限流),详解请求全流程校验、实时统计与动态优化闭环,并附Python实践代码。帮助企业从源头压缩无效消耗,优化资源分配,控制运营成本。
447 2
|
6月前
|
IDE 数据可视化 项目管理
【全网最详细】R-Studio下载安装教程 | R语言IDE开发环境使用步骤详解
R-Studio是Posit公司开发的R语言专业IDE,集代码编辑、控制台、数据可视化、项目管理于一体。专为R优化,功能全面、开箱即用,支持桌面版与服务器版,是R用户数据分析与统计编程的首选工具。(239字)
|
6月前
|
文字识别 安全 算法
没有 API 也能自动化?实在 Agent 基于视觉融合拾取的操作任意终端原理
本文解析视觉融合拾取技术,突破老旧系统无API、国产终端封闭、SaaS应用受限等“API孤岛”难题。通过多模态感知、五维特征融合、ISSUT屏幕语义理解及闭环执行架构,实现不依赖API的高鲁棒GUI自动化。实测在自研/国产系统中拾取准确率超99%,长链路任务成功率96.2%,兼顾安全合规与跨终端适配。
|
10月前
|
存储 NoSQL 关系型数据库
【赵渝强老师】MongoDB的数据类型
本文介绍MongoDB中常用的数据类型,包括ObjectId、String、Boolean、Number、Array、Object、Date等,通过代码示例演示其用法与区别,帮助理解文档型数据库的数据存储机制。
410 0
|
SQL 数据处理
Excel 如何将表中行列互换
本文介绍了在Excel中将行列互换的两种方法:使用Power Query和Pivot Table。详细步骤帮助你在数据处理中灵活转换表格结构,适用于不同场景,提升工作效率。
Excel 如何将表中行列互换
|
数据采集 搜索推荐 应用服务中间件
如何通过 noindex 阻止网页被搜索引擎编入索引?
在一些网站中,通过`robots.txt`可以控制哪些站点资源或目录能被搜索引擎索引,但是随着站点页面增加,之前允许的索引页面常常不希望被索引,如果直接修改 `robots.txt`,影响会比较大,所以页面级的控制就很有必要。
493 0
如何通过 noindex 阻止网页被搜索引擎编入索引?
|
JSON API 数据安全/隐私保护
批量上传发布视频的软件,小红书抖音快手哔哩哔哩,自动发布上传作品工具【python】
这个项目包含完整的视频批量上传功能,支持多个平台,包含视频处理、配置管理和错误处理等功能
|
Ubuntu Shell
解决 Ubuntu 用户登录后的 shell 和功能问题
通过本文的详细介绍,您可以掌握解决Ubuntu用户登录后shell和功能问题的方法,从而确保系统的稳定和正常使用。
836 29

热门文章

最新文章