Django 自学笔记兼学习教程第4章第1节——模型(Models)介绍

点击查看教程总目录

参考:https://docs.djangoproject.com/en/2.2/topics/db/models/

1 介绍

模型是关于数据的唯一、确定的信息源。它包含存储数据的基本字段和行为。通常,每个模型映射到一个数据库表。

以上是官方文档的介绍,但对于初学者,这太绕了,

粗略的讲:

建立一个模型(Model)相当于建立了一个数据库表(table)。

模型规定属性,就是数据库表规定字段(field)。

每用模型类建立一个实例,都是在数据库表里插入一条数据。

准确地讲,可以这么理解模型:

  1. 每个数据库表,都是用来记录一种事物的数据信息的,比如学生表,是用来记录学生这种对象的多个维度的信息。每个信息维度(比如姓名、性别、生日、邮箱、学号)对应数据库表的一个字段。
  2. 对于学生这种对象,我们可以建立一个模型类(Model),模型的每个属性对应学生一个信息维度(比如姓名、性别、生日、邮箱、学号)。
  3. 数据库表的每一行,都是一个具体的学生的信息,对应也就是模型类(Model)的一个实例。

2 示例

以简单的教务管理系统中的学生这种对象为例,

首先,我们分析出该对象需要的属性:

  • 姓名(name)
  • 性别(gender)
  • 生日(birthday)
  • 邮箱(email)
  • 个人简介(info)
  • 年级(grade)
  • 年级子学号(number)
  • 密码(password)

同时,一个学生能由年级+年级子学号唯一确定,则年级+年级子学号为其主键。

那么其model的示例写法如下

from django.db import models

class Student(models.Model):
gender = [
("m", "男"),
("f", "女")
] name = models.CharField(max_length=50, verbose_name="姓名")
gender = models.CharField(max_length=10, choices=gender, default='m', verbose_name="性别")
birthday = models.DateField(verbose_name="生日")
email = models.EmailField(verbose_name="邮箱")
info = models.CharField(max_length=255, verbose_name="个人简介", help_text="一句话介绍自己,不要超过250字") grade = models.CharField(max_length=4, verbose_name="年级")
number = models.CharField(max_length=6, verbose_name="年级子学号")
password = models.CharField(max_length=30, verbose_name="密码") class Meta:
constraints = [
# 复合主键:保证 grade和number组合的student_id唯一
models.UniqueConstraint(fields=['grade', 'number'], name='student_id'),
]

具体的代码意思,我们在本章下一小节详细说明。

3 更新到数据库

在django框架下,并不是添加好模型(model)就万事大吉了

添加好模型后,我们还需要手动执行脚本,才能根据模型生成对应的数据库表。

在项目文件夹下,打开命令行,按行依次执行:

python manage.py makemigrations
python manage.py migrate

解释下上面这两句的作用

其中第1句会生成对应的迁移(migrations)命令。

如果是第一次运行的项目,由于是

那么会在./your_app/migrations文件夹下,

生成0001_initial.py用于记录迁移(migrations)命令

第一次运行也会在项目文件夹下,生成一个空的 database:db.sqlite3

第2句会执行第一句中生成的迁移(migrations)命令。

执行完第二句,改动才真正更新到数据库文件了。

当然,实际上,数据库中的改动并不是简单的添加了这一个模型的事,有兴趣的朋友可以打开此时的db.sqlite3看看。无法直接打开,需要使用对应的软件,我一般用DB Browser (SQLite),里面生成了很多个表,不过这个细说起来就复杂了。

以后我们如果修改了模型的属性之类,也要执行上面两句脚本去更新对应的数据库表。

Django笔记&教程 4-1 模型(Models)介绍的更多相关文章

  1. Django笔记&教程 6-3 使用模型(models)创建表单(form)

    Django 自学笔记兼学习教程第6章第3节--使用模型(models)创建表单(form) 点击查看教程总目录 本文参考:Forms for models 1 - 初步介绍 很多时候,我们使用的表单 ...

  2. Django基础核心技术之Model模型的介绍与设计

    Django基础核心技术之Model模型的介绍与设计原创: Yunbo Shi Python Web与Django开发 2018-05-03Django网络应用开发的5项基础核心技术包括模型(Mode ...

  3. Django笔记&教程 4-3 模型(models)主键外键

    Django 自学笔记兼学习教程第4章第3节--模型(models)主键外键 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref/models ...

  4. Django笔记&教程 总目录

    本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...

  5. Django笔记&教程 4-2 模型(models)中的Field(字段)

    Django 自学笔记兼学习教程第4章第2节--模型(models)中的Field(字段) 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref ...

  6. Django笔记&教程 7-1 基于类的视图(Class-based views)介绍

    Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...

  7. Django笔记&教程 2-3 视图(view)函数介绍

    Django 自学笔记兼学习教程第2章第3节--视图(view)函数介绍 点击查看教程总目录 参考文献:https://docs.djangoproject.com/en/2.2/topics/htt ...

  8. Django笔记&教程 3-2 模板语法介绍

    Django 自学笔记兼学习教程第3章第2节--模板语法介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/templates/# ...

  9. Django笔记&教程 6-1 表单(Form)介绍

    Django 自学笔记兼学习教程第6章第1节--表单(Form)介绍 点击查看教程总目录 1 介绍 如果网站要让用户输入并提交数据(比如注册登录),则需要用到表单. 单纯的html也能写出表单,格式一 ...

随机推荐

  1. Selenium自动化结合Mysql数据项目实战操作

    前言 web自动化结合Mysql做一些实战操作,今天实战的场景是通过读取web页面字段名与数据库相应的表中的字段名进行对比 - 注:商城是自己搭建在本地,小伙伴需要源码请私聊 解决思路 第一步:获取w ...

  2. IdentityServer4[2]:启动一个新的IdentityServer项目

    启动一个新的IdentityServer项目 从头开始,从基础开始,然后变得更加复杂,循序渐进的学习 工具:VS2017 15.9.8 .Net Core2.2 基本过程 创建一个新的ASP.NET ...

  3. 技术与艺术的结合,HMS Core让手机主题趣味丛生

    在9月23日晚举办的华为nova9系列新品发布会上,华为在发布nova9系列新机之外,还为观众展示了多款Harmony OS趣味主题.其中一款名为"翻滚吧牛奶"的应用主题看起来十分 ...

  4. 10.7 URI

    URI:   Uniform Resource Identifier  统一资源标识符 URL:  Uniform Resource Locator    统一资源定位符 URN: Uniform R ...

  5. 从零入门 Serverless | 一文讲透 Serverless Kubernetes 容器服务

    作者 | 张维(贤维) 阿里云函数计算开发工程师 导读:Serverless Kubernetes 是以容器和 kubernetes 为基础的 Serverless 服务,它提供了一种简单易用.极致弹 ...

  6. 微信公众号开发之H5页面跳转到指定的小程序

    前言: 最近公司有一个这样的需要,需要从我们在现有的公众号H5页面中加一个跳转到第三方小程序的按钮.之前只知道小程序之间是可以相互跳转的,今天查阅了下微信开发文档原来现在H5网页也支持小程序之间的跳转 ...

  7. Data Management Tools(数据管理工具)《二》

    (数据管理工具)<二> 点击跳转(数据管理工具)<一> 16.打包 # Process: 共享包 arcpy.SharePackage_management("&qu ...

  8. 【Ubuntu】VirtualBox 您没有查看“sf_VirtualDisk”的内容所需的权限

    ​ 但是现在发现无法去访问,没有权限: ​ 即使是: crifan@crifan-Ubuntu:~$ sudo chown -R crifan /media/sf_win7_to_ubuntu/ cr ...

  9. CF193D Two Segments (线段树+dp)(外加两个扩展题)

    大概算是个系列整理 (最强版是模拟赛原题)) 首先,我们先来看这个题目. QWQ一开始是毫无头绪,除了枚举就是枚举 首先,我们可以枚举一个右端点,然后算一下当前右端点的答案 我们令\(f[l,r]\) ...

  10. 2021.1.28--vj补题

    B - B CodeForces - 994B 题内容: Unlike Knights of a Round Table, Knights of a Polygonal Table deprived ...