django之models模块使用
定义模型
将数据库表定义成类,集成models.Model
from django.db import models
# Create your models here.
class Author(models.Model):
name=models.CharField(max_length=100)
django会自动生成id字段作为主键,如果不定义主键的话
2,使用模型
将使用manage.py startapp XXX 创建的应用加入到setting下的INSTALLED_APPS下面,注意它为元组,别忘记后面的逗号
确保运行命令manage.py migrate,可以事先使用manage.py makemigrations 给应用生成迁移脚本。
3,字段
字段类型
模型中的每一个字段是field子类的实例
CharField和TextField字段都是最基本的保存文本的字段,其中Charfield是指定固定长度的,另一个是无限长的
DataField和DatatimeField字段是保存时间的字段
FileField是保存文件路径的字段
也可以自己自定义字段类型
字段选项
Null,如果为True,则将数据库中空值保存为NULL,默认为False
Blank,如果为True,则表单的验证允许为空值,默认为False,他是表单输入验证范畴的
Choice,由二维元组提供一些选项,设置了choice,表单是一个选择框,而不是文本框
Default,字段的默认值,可以是一个值或者可调用对象
Help_text,表单部件额外显示的帮助信息
Primary_key,如果为True,则该字段为主键,如果表中没有设置该值,django自动生成Id字段为主键
Unique,如果为True,这个数据字段在整个表中都是唯一的
关系
Django提供了最常见的三种数据库关系:多对一,多对多,一对一
多对一关系
Django使用 django.db.models.ForeignKey 定义多对一关系,和使用其他字段类型一样,在模型中把它作为类的属性包含进来
class Author(models.Model):
name=models.CharField(max_length=100)
class Book(models.Model):
title=models.CharField(max_length=100)
author=models.ForeignKey(Author) #定义了多对一的关系
length=models.IntegerField()
若要创建一个递归的关联 —— 对象与自己具有多对一的关系 —— 请使用models.ForeignKey('self')。
如果你需要关联到一个还没有定义的模型,你可以使用模型的名字而不用模型对象本身:
from django.db import models
class Car(models.Model):
manufacturer = models.ForeignKey('Manufacturer')
class Manufacturer(models.Model):
# ...
Pass
多对多关系
ManyToManyField 用来定义多对多关系,用法和其他Field 字段类型一样:在模型中做为一个类属性包含进来。
在哪个模型中使用ManytoManyField并不重要,在两个模型中任选一个即可,不用两个模型都设置
class Book(models.Model):
title=models.CharField(max_length=100)
author=models.ForeignKey(Author)
length=models.IntegerField() class classify(models.Model):
name=models.CharField(max_length=100)
books=models.ManyToManyField(Book) #定义多对多的关系
也可以按照数据库sql定义多对多关系的形式,在定义另一个模型,对两个模型设置外键
一对一关系
OneToOneField用来定义一对一关系。 用法和其他字段类型一样:在模型里面做为类属性包含进来。
class Author(models.Model):
name=models.CharField(max_length=100) class Authorinfo(models.Model):
phone=models.CharField(max_length=20)
add=models.CharField(max_length=300)
sex=models.CharField(choices=sex_choice)
author=models.OneToOneField(Author)
模型方法
可以在模型上定义自定义的方法来给你的对象添加自定义的“底层”功能。Manager 方法用于“表范围”的事务,模型的方法应该着眼于特定的模型实例。
如def __str__(self) #适用于python3
Return xxx
对于python2使用
Def __unicode__(self)
Return xxx
多表集成
Django的model中提供表之间的集成关系,每一层级下面的models是一个完整的model。在父表中的字段在字表中都有效,只是没有保存在字表中
具体的用法参考官网
django之models模块使用的更多相关文章
- django的models模块查询方法
假定models中有一个类BookInfo 模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集. 查询集类似列表,有相似的方法. 1 model查询语句: ...
- Django之models模块
一.字段 1. AutoField(Field) int自增列,必须填入参数 primary_key=True 2.BigAutoField(AutoField) bigint自增列,必须填入参数 p ...
- 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...
- 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多
第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- 七 Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from django.db.models import F from django.shortcuts import rende ...
- 五 Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
随机推荐
- Hanlp分词实例:Java实现TFIDF算法
算法介绍 最近要做领域概念的提取,TFIDF作为一个很经典的算法可以作为其中的一步处理. 关于TFIDF算法的介绍可以参考这篇博客http://www.ruanyifeng.com/blog/2013 ...
- https 不检验证书
System.Net.ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErro ...
- sql 数据类型转换
1.convert(float,endtimepart)——conver(数据类型,字段名称) 2.cast(endtimepart as float)——cast(字段名称 as 数据类型)
- MySQL 单条记录长度最大65535
今天设计表结构,加了几个字段,结果报错了 Ligne trop grande. Le taille maximale d'une ligne, sauf les BLOBs, est 65535... ...
- Flask--路由备忘
路由: 路由传参route("/index/<userid>") def index(userid),参数数据类型的指定route("user/<int ...
- Daubechies小波介绍
Daubechies小波是正交.连续且紧支撑的. 正交条件下,$H(\omega)$必须满足下式: $|H(\omega)|^2+|H(\omega + \pi)|^2 =1$ 连续紧支撑条件下,$H ...
- mysql 事务学习
1.事务 逻辑上的一组操作,组成这组操作的各个逻辑单元要么一起成功,要么一起失败. 2.事务特性 原子性:强调事务的不可分割.一致性:强调的是事务的执行的前后,数据的完整性要保持一致.隔离性:一个事务 ...
- 第一篇Docker博文
Docker组件 Docker引擎 Docker是一个客户端/服务器(C/S)架构的程序.Docker客户端只需向Docker服务器或叫守护进程发出请求,服务器将完成所有工作并返回结果. Docker ...
- 廖雪峰Java5集合-1Java集合简介-1Java结合简介
1.集合 定义:集合就是一堆东西.集合里的东西,称为元素Element 数学中的集合: 有限集合: * 一个班所有的学生组成的集合 * 一个网站所有的商品组成的集合 无限集合: * 全体自然数集合 * ...
- 模拟远程SSH执行命令的编解码说明
模拟一个SSH“远程”执行命令并获取命令结果的一个程序: 1.在C/S架构下,当客户端与服务器建立连接(这里以TCP为例)后,二者可以不断的进行数据交互.SSH远程可以实现的效果是客户端输入命令可以在 ...