Django 第一个应用 项目的数据库模型
目录
创建模型
1、在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计和附加的其它元数据。
2、本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄
图书表结构设计:
- 表名: Book
- 图书名称: name
- 图书发布时间: pub_date
英雄表结构设计:
- 表名: Hero
- 英雄姓名: name
- 英雄性别: gender
- 英雄简介: hcontent
- 所属图书: book_id
图书-英雄的关系为一对多
3、这些概念可以通过一个 Python 类来描述。按照下面的例子来编辑 bookApp/models.py文件:
bookApp/models.py:
from django.db import models
# Create your models here.
"""
名词:
ORM(Object Ralational Mapping,对象关系映射)用来把对象模型表示的对象映射到基于S Q L 的关系模型数据库结构中去。
这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQ L 语句打交道,只需简单的操作实体对象的属性和方法。
一对多关系:外键写在多的一端
book:hero = 1:n
"""
# Create your models here.
# 类对应数据库表, 表名称默认为bookApp_book.
class Book(models.Model):
# 属性对应数据库表的列名,默认会添加id这一列。
name = models.CharField(max_length=40, verbose_name="书籍名称")
pub_date = models.DateField(verbose_name="出版日期")
# 魔术方法,字符串友好展示,便于调试代码
def __str__(self):
return self.name
class Meta:
# 单数显示的名称
verbose_name = "图书管理"
# 复数显示的名称
verbose_name_plural = "图书管理"
# 类对应数据库表, 表名称默认为bookApp_hero.
class Hero(models.Model):
# 属性对应数据库表的列名,默认会添加id这一列。
gender_choice = [
(1, "男"),
(2, "女")
]
name = models.CharField(max_length=20, verbose_name="人物名称")
# 性别只能选择男(1)或者女(2)
gender = models.IntegerField(choices=gender_choice, verbose_name="性别")
content = models.TextField(max_length=1000, verbose_name="人物描述")
# 外键关联, 如果删除书籍时,相关hero对应的书籍设置为空。
bool_id = models.ForeignKey(Book, on_delete=models.SET_NULL,
null=True, verbose_name="书籍id")
# 魔术方法,字符串友好展示,便于调试代码
def __str__(self):
return self.name
class Meta:
# 单数显示的名称
verbose_name = "人物管理"
# 复数显示的名称
verbose_name_plural = verbose_name
激活模型
1、上面的一小段用于创建模型的代码给了 Django 很多信息,通过这些信息,Django 可以:
- 为这个应用创建数据库 schema(生成
CREATE TABLE
语句)。 - 创建可以与
Question
和Choice
对象进行交互的 Python 数据库 API。
2、迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表 - 它专注于使数据库平滑升级而不会丢失数据。我们会在后面的教程中更加深入的学习这部分内容,现在,你只需要记住,改变模型需要这三步:
- 编辑
models.py
文件,改变模型。 - 运行 python manage.py makemigrations 为模型的改变生成迁移文件。
- 运行 python manage.py migrate 来应用数据库迁移。
但是首先得把 bookApp
应用安装到我们的项目里。
3、在 BookManage_1/settings.py 的 INSTALLED_APPS = [ ] 中加入 应用名称 :
添加到 Django 管理页面
效果: