深入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模型有两个字段:nameemailPost模型有四个字段:titlecontentauthorpublished_dateauthor字段是一个外键,它指向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_lengthnullblank等,这些选项可以控制字段的行为。
  • 字段类型 :Django提供了多种字段类型,如CharFieldIntegerFieldDateField等,以适应不同的数据需求。
  • 关系:Django支持多种类型的关系,包括一对一、一对多和多对多。
  • 方法和属性:你可以在模型中定义方法和属性,这些方法和属性可以被序列化,用于表单验证等。

总结

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

相关推荐
cyt涛1 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油2 小时前
01_SQLite
数据库·sqlite
向上的车轮2 小时前
Django学习笔记五:templates使用详解
笔记·学习·django
liuxin334455662 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。3 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec3 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa3 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke3 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D3 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录4 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份