课程:Django入门项目 - 论坛系统
打卡时间:2018.4.24
目录
【Django】入门实践指南之环境搭建|第0篇
【Django】入门实践指南之系统设计|第1篇
【Django】入门实践指南之模型设计|第2篇
【Django】入门实践指南之模板引擎|第3篇
【Django】入门实践指南之测试&静态文件配置|第4篇
【Django】入门实践指南之Admin&URL分发|第5篇
【Django】入门实践指南之模板复用&表单处理|第6篇
前言
上一篇实现了论坛系统的整体设计,这一篇学习如何创建数据模型。这些模型代表应用程序的数据库设计。
一、模型
接下来创建Board
,Topic
和Post
。User
模型使用内置应用auth
,命名空间在django.contrib.auth
。
所有的模型都是django.db.models.Model
类的子类。每个类都将被转换为数据库表。每个字段由django.db.models.Field
子类的实例表示,它们并将被转为数据库的列。
官方文档中,提供了很多内置类型。Field types
1.1 可选参数
在使用Field
子类是设置参数限制字段的行为,以下列举几个参数:
-
null
: 为True
时,在数据库中存储空值NULL
。避免在字符串类型的Field
中使用,例如:CharField
、TextField
。因为,它可能会导致两种情况:没有值和值为空。 -
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
,进入交互式环境。
- 导入
Board
类:
>>> from boards.models import Board
- 创建一个新的
Board
对象。并代用save()
方法保存到数据库中。
>>> board = Board(name='Swift', description='This is a Swift board')
>>> board.save()
- 访问
board
对象, 查看board
信息。(之前添加过,这里输出3)
>>> board.id
3
>>> board.name
'Swift'
>>> board.description
'This is a Swift board'
每个Django
模型都带有一个特殊的属性,称为模型管理器。
另外,还可以使用objects
来访问管理器,它主要用于数据库操作。
>>> Board.objects.all()
<QuerySet [<Board: Django>, <Board: iOS>, <Board: Swift>]>
上面输出的内容,是重写__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
类型和参数。
参考文档:
网友评论