7.Django模型类的定义和管理
Django的模型类是给ORM层服务的
1.每个数据模型都是django.db.models.Model的子类。
2.它的父类Model包含了所有必要的和数据库交互的方法,并提供了定义数据库字段的语法。
3.每个模型相当于一个数据库表(这条规则的例外情况是多对多关系,多对多关系的时候会多生成一张关系表),
4.每个属性是表中的一个字段。属性名就是字段名,类型就是字段类型
5.模型之间的三种关系
一对一(OneToOneField)
一对多(ForeignKey)
多对多(ManyToMangField)
6.把定义的模型放到models.py里,这里就是:hello_django\hello\models.py文件
7.语法
class MyModel(models.Model):
name = models.CharField(max_length=30, verbose_name="名称")
class Meta:
verbose_name = '中文表明'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
解释:
a.通过class定义models名称也就是数据库的表名
b.需要传入models.Model固定写法
c.在class的内部,通过name=models.XXXField(params)定义字段
c.1 models.XXXField常用选项
BooleanField:布尔类型
CharField:字符串varchar
DateField:日期
DateTimeField:时间戳
DecimalField:带小数的数
c.2 params常用选项:
null(null=True|False)数据库字段的是否可以为空
blank(blank=True|False)字段是否为空,表单验证
default 字段默认值
help_text 字段解释
primary_key 主键,一般不用显示定义,框架自动生成个id
unique 是否唯一,对数据库而言
verbose_name 字段详细名称,通常写自己的中文含义
c.3 详见:https://docs.djangoproject.com/en/1.9/ref/models/fields
d.通过内部类class Meta定义一些扩展属性
d.1例如:
class Meta:
verbose_name = '中文表明'
verbose_name_plural = verbose_name
d.2详见:https://docs.djangoproject.com/en/1.9/ref/models/options/
e.可以通过def定义内部的函数或者重写他的函数,可以提供具体的逻辑
e.1示例:定义__str__()让对象有个默认的名字(属于重写他的方法)
备注:python2里用__unicode__(),python3里是__str__()
7.通过manage.py生成数据库表
manage.py makemigrations (创建脚本)
manage.py migrate (执行脚本)
8.在hello_django\hello\admin.py加入管理后,可在admin界面管理,代码如下
from django.contrib import admin
from hello.models import *
# Register your models here.
admin.site.register(Author)
7.Django模型类的定义和管理的更多相关文章
- Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)
一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...
- Django模型Model的定义
概述 Django对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用API,可以根据不同的业务需求选择不同的数据库. 模型.属性.表.字段间的关系 一个模型类在数据库中对应一张表, ...
- Django进阶Model篇002 - 模型类的定义
一.创建数据模型. 实例: 作者模型:一个作者有姓名. 作者详情模型:把作者的详情放到详情表,包含性别.email 地址和出生日期,作者详情模型与作者模型之间是一对一的关系(OneToOneField ...
- Django模型类Meta元数据详解
转自:https://my.oschina.net/liuyuantao/blog/751337 简介 使用内部的class Meta 定义模型的元数据,例如: from django.db impo ...
- django模型类
模型类 ORM django中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来,只需要通过类和对象就可以对数据表进行操作. 在Django中主要是设计类:模型类. ORM另外一个作用:根据设计 ...
- Django | 模型类变更后生成迁移文件,报错:You are trying to add a non-nullable field 'BookName' to BookInfo without a default....
报错: You are trying to add a non-nullable field 'BookName' to BookInfo without a default; we can't do ...
- 8.Django模型类例子
这里定义4个模型 作者:一个作者有姓名 作者详情:包括性别,email,出生日期, 出版商:名称,地址,城市,省,国家,网站 书籍:名称,日期 分析: 作者详情和作者一对一的关系 一本书可以有多个作者 ...
- Django模型类之models字段类型和参数以及元数据meta
models之字段类型和参数 示例: # class Test(models.Model): # courses_test # """测试学习用""& ...
- django 模型类的常见字段约束,以及filter 过滤和查询
null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...
随机推荐
- 测试用例 自动生成工具PICT与AllPairs
通常我们在设计或编写测试用例时,存在一个"痛点":要么设计的测试用例存在遗漏,难以100%覆盖测试需求:要么被测系统过于复杂,设计的测试用例过多,导致前期的设计和后续的执行工作量过 ...
- Navicat Premium 连接 Oracle 数据库
Navicat Premium 是一个可多重连接的数据库管理工具,它可让你以单一程序同時连接到 MySQL.SQLite.Oracle 及 PostgreSQL 数据库,让管理不同类型的数据库更加方便 ...
- v-if 条件渲染分组
因为 v-if 是一个指令,所以必须将它添加到一个元素上.但是如果想切换多个元素呢?此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v-if.最终的渲染结果将 ...
- 程序猿的量化交易之路(24)--Cointrader之RemoteEvent远程事件实体(11)
转载需注明出处:http://blog.csdn.net/minimicall,http://cloudtrader.top/ 在量化交易系统中.有些事件是远端传来的,比方股票的价格数据等.所以,在这 ...
- HDU 3732 Ahui Writes Word(多重背包)
HDU 3732 Ahui Writes Word(多重背包) http://acm.hdu.edu.cn/showproblem.php? pid=3732 题意: 初始有N个物品, 每一个物品有c ...
- ubuntu 安装时出错 sudo apt-get update Reading package lists… Error
安装过程出错 首先出现问题sudo apt-get updateReading package lists… Error!E: Encountered a section with no Packag ...
- 微软认知服务:QnA Maker使用示例
简介 QnA Maker 从用户提供的内容(包括 FAQ URL.文档和编辑内容)中提取所有可能存在的问答对:利用易于使用的界面编辑.删除和添加问答对,然后将知识库作为 API 终结点进行发布:QnA ...
- js中删除数组元素的几种方法
1:js中的splice方法 splice(index,len,[item]) 注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 inde ...
- reveal end of document
window - Preferences - Run/Debug - Console 将 Console buffer size (characters)设置大一点
- NPOI 添加下拉列表
需求 给指定列添加下拉列表.如下图: 思路 NPOI的文档网站不能访问了,这里参考的POI文档. 加下拉列表有两种方式,一种直接写字符串,例如 new String[]{"10", ...