Django笔记&教程 4-1 模型(Models)介绍
Django 自学笔记兼学习教程第4章第1节——模型(Models)介绍
点击查看教程总目录
1 介绍
模型是关于数据的唯一、确定的信息源。它包含存储数据的基本字段和行为。通常,每个模型映射到一个数据库表。
以上是官方文档的介绍,但对于初学者,这太绕了,
粗略的讲:
建立一个模型(Model)相当于建立了一个数据库表(table)。
模型规定属性,就是数据库表规定字段(field)。
每用模型类建立一个实例,都是在数据库表里插入一条数据。
准确地讲,可以这么理解模型:
- 每个数据库表,都是用来记录一种事物的数据信息的,比如学生表,是用来记录学生这种对象的多个维度的信息。每个信息维度(比如姓名、性别、生日、邮箱、学号)对应数据库表的一个字段。
- 对于学生这种对象,我们可以建立一个模型类(Model),模型的每个属性对应学生一个信息维度(比如姓名、性别、生日、邮箱、学号)。
- 数据库表的每一行,都是一个具体的学生的信息,对应也就是模型类(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)介绍的更多相关文章
- Django笔记&教程 6-3 使用模型(models)创建表单(form)
Django 自学笔记兼学习教程第6章第3节--使用模型(models)创建表单(form) 点击查看教程总目录 本文参考:Forms for models 1 - 初步介绍 很多时候,我们使用的表单 ...
- Django基础核心技术之Model模型的介绍与设计
Django基础核心技术之Model模型的介绍与设计原创: Yunbo Shi Python Web与Django开发 2018-05-03Django网络应用开发的5项基础核心技术包括模型(Mode ...
- Django笔记&教程 4-3 模型(models)主键外键
Django 自学笔记兼学习教程第4章第3节--模型(models)主键外键 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref/models ...
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
- Django笔记&教程 4-2 模型(models)中的Field(字段)
Django 自学笔记兼学习教程第4章第2节--模型(models)中的Field(字段) 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref ...
- Django笔记&教程 7-1 基于类的视图(Class-based views)介绍
Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...
- Django笔记&教程 2-3 视图(view)函数介绍
Django 自学笔记兼学习教程第2章第3节--视图(view)函数介绍 点击查看教程总目录 参考文献:https://docs.djangoproject.com/en/2.2/topics/htt ...
- Django笔记&教程 3-2 模板语法介绍
Django 自学笔记兼学习教程第3章第2节--模板语法介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/templates/# ...
- Django笔记&教程 6-1 表单(Form)介绍
Django 自学笔记兼学习教程第6章第1节--表单(Form)介绍 点击查看教程总目录 1 介绍 如果网站要让用户输入并提交数据(比如注册登录),则需要用到表单. 单纯的html也能写出表单,格式一 ...
随机推荐
- Windows10通过WSL编译jdk12
Windows使用WSL编译OpenJDK 安装Ubuntu以及配置国内镜像 首选确保windows10已经安装了ubuntu 更换ubuntu20.04国内镜像,这里我选择的是阿里云镜像 sudo ...
- VUE -input输入框字母转大写
示例: 输入自动转--->大写 <input type="text" placeholder="请输入证件号码" maxlength="1 ...
- Redis的单线程架构
前言 在一定的策略下适度地初始化线程池的线程数有利于提高CPU的利用率,达到高效率地在同一段时间内处理多个任务,最佳的线程数量一般是 最佳线程数=(线程等待的时间与线程CPU执行时间之比+1)*CPU ...
- Filter防火墙
实验简介 实验属于防火墙系列 实验目的 了解个人防火墙的基本工作原理: 掌握Filter防火墙的配置. 实验环境 一台安装了win7操作系统的主机. 预备知识 防火墙 防火墙(Firewall)是一项 ...
- 洛谷2900 [USACO08MAR]土地征用Land Acquisition (斜率优化+dp)
自闭的一批....为什么斜率优化能这么自闭. 首先看到这个题的第一想法一定是按照一个维度进行排序. 那我们不妨直接按照\(h_i\)排序. 我们令\(dp[i]\)表示到了第\(i\)个矩形的答案是多 ...
- 永久修改alias
永久修改alias home目录下ls -a显示隐藏文件 编辑./cshrc
- vue2和vue3比较
一.vue3新特性: 1.数据响应重新实现(ES6的proxy代替Es5的Object.defineProperty) 2.源码使用ts重写,更好的类型推导 3.虚拟DOM新算法(更快,更小) 4.提 ...
- noj->电子老鼠走迷宫
00 问题 描述: 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路.电子老鼠可以在路上向上.下.左.右行走,每一步走一个格子.现给定一个起 ...
- 康托展开+逆展开(Cantor expension)详解+优化
康托展开 引入 康托展开(Cantor expansion)用于将排列转换为字典序的索引(逆展开则相反) 百度百科 维基百科 方法 假设我们要求排列 5 2 4 1 3 的字典序索引 逐位处理: 第一 ...
- HttpClient使用GET方式通过代理服务器读取页面的例子
import java.io.BufferedReader;import java.io.InputStreamReader;import org.apache.http.HttpEntity;imp ...