【Django】入门实践指南之模型设计|第2篇

课程:Django入门项目 - 论坛系统
打卡时间:2018.4.24

目录

【Django】入门实践指南之环境搭建|第0篇
【Django】入门实践指南之系统设计|第1篇
【Django】入门实践指南之模型设计|第2篇
【Django】入门实践指南之模板引擎|第3篇
【Django】入门实践指南之测试&静态文件配置|第4篇
【Django】入门实践指南之Admin&URL分发|第5篇
【Django】入门实践指南之模板复用&表单处理|第6篇

前言

上一篇实现了论坛系统的整体设计,这一篇学习如何创建数据模型。这些模型代表应用程序的数据库设计。

一、模型

接下来创建Board,TopicPostUser模型使用内置应用auth,命名空间在django.contrib.auth

【Django】入门实践指南之模型设计|第2篇_第1张图片

所有的模型都是django.db.models.Model类的子类。每个类都将被转换为数据库表。每个字段由django.db.models.Field子类的实例表示,它们并将被转为数据库的列。

官方文档中,提供了很多内置类型。Field types

1.1 可选参数

在使用Field子类是设置参数限制字段的行为,以下列举几个参数:

  • null: 为True时,在数据库中存储空值NULL。避免在字符串类型的Field中使用,例如:CharFieldTextField。因为,它可能会导致两种情况:没有值和值为空。
  • unique: 为True时,表示是否唯一值。
  • blank: 为 True时,字段允许为空。

DateField参数:

  • auto_now: 每次保存时,将时间设置为现在。
  • auto_now_add: 第一创建时,设置时间。

1.2 关系Field

ForeignKey: 外键,表示一种多对一的关系。

ForeignKey('self', on_delete=models.CASCADE)

django 2.0中,on_delete不可以省略。

二、迁移模型

进入django_venv环境,找到项目目录,执行:

python manage.py makemigrations

此时创建了一个名为0001_initial.py的文件。

生成迁移文件应用到数据库:

python manage.py migrate

现在就创建数据库和表了。

测试一下吧!

需要使用shell工具。执行python manage.py shell,进入交互式环境。

  1. 导入Board类:
>>> from boards.models import Board
  1. 创建一个新的Board对象。并代用save()方法保存到数据库中。
>>> board = Board(name='Swift', description='This is a Swift board')
>>> board.save()
  1. 访问board对象, 查看board信息。(之前添加过,这里输出3)
>>> board.id
3
>>> board.name
'Swift'
>>> board.description
'This is a Swift board'

每个Django模型都带有一个特殊的属性,称为模型管理器。

另外,还可以使用objects来访问管理器,它主要用于数据库操作。

>>> Board.objects.all()
, , ]>

上面输出的内容,是重写__str__方法中提供的内容。

>>> board = Board.objects.get(id=1)
>>> board.name
'Django'

下面是我们在本节中关于模型学到的方法和操作,使用Board模型作为参考。大写的 Board指的是类,小写的board指Board的一个实例。

操作 代码示例
创建一个对象而不保存 board = Board()
保存一个对象(创建或更新) board.save()
数据库中创建并保存一个对象 Board.objects.create(name='...', description='...')
列出所有对象 Board.objects.all()
通过字段标识获取单个对象 Board.objects.get(id=1)

三、小结

本章学习了如何创建模型,以及学习Field类型和参数。

参考文档:

  • Django入门指南-第4章:模型设计
  • 第一章:模型层model layer - 刘江

你可能感兴趣的:(【Django】入门实践指南之模型设计|第2篇)