from django.db import models

# Create your models here.
class Classes(models.Model):
'''
班级表
'''
title=models.CharField(max_length=32)
m=models.ManyToManyField('Teachers') '''
obj=models.Classes.objects.filter(id=1).first()
obj.m.add(1) 代表创建班级id=1 老师Id=1数据对象
obj.m.add(2) 代表创建班级id=1 老师Id=2数据对象 obj=models.Classes.objects.filter(id=2).first()
obj.m.add(1) 代表创建班级id=2 老师Id=1数据对象
obj.m.add(2) 代表创建班级id=2 老师Id=2数据对象
obj.m.add([2,3]) 代表创建班级id=2 老师id=2 id=3数据对象 '''
class Teachers(models.Model):
'''
老师表
'''
'''-----------单表-----------------
每个数据对象在数据库中会有一列自增的ID
一、创建数据对象(增)
创建数据对象的两种方法
1.models.Teachers.objects.create(name='xx') 2.obj=Teachers(name='xx')
obj.save() 二、获取数据对象(查)
models.Teachers.objects.all() //获取所有对象
models.Teachers.objects.filter(id=1)//获取某个对象
models.Teachers.objects.filter(id=1,name='xx')
models.Teachers.objects.filter(id__gt=1)//获取ID大于等于1的对象
models.Teachers.objects.filter(id__gt=1).first()//获取ID大于等于1的对象中的第一个
models.Teachers.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存
三、删除数据对象(删)
models.objects.Teachers.filter(id=1).delete()//删除ID=1对象 四、修改数据对象
models.Teachers.objects.all().update(name='xx')
models.Teachers.objects.filter(id=1).update(name='xx')//有过滤条件的修改
''' name=models.CharField(max_length=32) class Student(models.Model):
'''
学生表
''' username=models.CharField(max_length=32)
age=models.IntegerField()
gender=models.BooleanField()
cs=models.ForeignKey(Classes,on_delete=models.CASCADE) #ForeignKey约束的对象在数据库中会自带下划线__id,此处的cs 里面包含id 和title '''
学生对象在数据库中右5列标识 id username age gender cs__id 1.创建数据对象(增)
models.Students.objects.create(username='xx',age=20,gender='男',cs__id=1)
models.Students.objects.create(username='xx',age=20,gender='男',cs=models.Class.objects.filter(id=1).first())
班级:
Id title
1 软件工程
2 嵌入式班
3 大数据班
Students类中的cs代表是班级里的一行数据:如:1 软件工程(即:id和title),若要取班级的中ID或title中的一项,
需要采用cs__id或cs__title
2.查询数据(查)
res=models.Students.objects.all() //获取的是多条数据
for item in res:
print(item.id)
print(item.username)
print(item.age)
print(item.gender)
print(item.cs__id)
print(item.cs.id) #for循环跨表的时候可以使用cs__id或cs.id
print(item.cs__title)
print(item.cs.title) 3.删除(删) models.Students.objects.filter(id=1).delete()
models.Students.objects.filter(cs__id=1).delete()
models.Students.objects.filter(username='xxx').delete() cid=input('请输入班级ID')
models.Students.objects.filter(cs__id=cid).delete()
ctitle=input('请输入班级名称')
models.Students.objects.filter(cs__title=ctitle).delete()
models.Students.objects.filter(cs.title=ctitle).delete()
#cs.title=ctitle不成立,for循环中可以使用cs__id或cs.id,但是此处只能使用cs__id 4.修改数据(改) models.Students.objects.filter(id=1).update(username='xxx') ''' #多对多
'''
班级:
Id title
1 网络1班
2 软件1班 老师:
Id name
1 Lee
2 Mark
3 Amie 老师--班级关系对应表(类 隐藏的多对多数据表)
id TeacherID ClassId
1 1 2
1 1 2
2 2 1
2 2 1 ''' '''
总结:
1.models中的一个类代表数库中的一个表,类中的一个对象代表数据表中的一行记录
2.Fk字段代表关联表中的一行数据
3.manyTomany字段,自动生成第三表,依赖关联表对第三张表进行操作。
'''
2 models字段
 Django models 的字段类型

 1、models.AutoField   ---自增列 = int(11)    如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、models.CharField   ---字符串字段  单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField。必须 max_length 参数,django会根据这个参数在数据库层和校验层限制该字段所允许的最大字符数。 3、models.BooleanField   ---布尔类型=tinyint(1)   不能为空,Blank=True 4、models.ComaSeparatedIntegerField   ---用逗号分割的数字=varchar   继承CharField,所以必须 max_lenght 参数, 5、models.DateField   ---日期类型 date   对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField   ---日期类型 datetime   同DateField的参数
7、models.Decimal   ---十进制小数类型 = decimal   必须指定整数位max_digits和小数位decimal_places
8、models.EmailField   ---字符串类型(正则表达式邮箱) =varchar   对字符串进行正则表达式   一个带有检查 Email 合法性的 CharField,不接受 maxlength 参数。
9、models.FloatField   ---浮点类型 = double   浮点型字段。 必须提供两个 参数, 参数描述:   max_digits:总位数(不包括小数点和符号)   decimal_places:小数位数。如:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:models.FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百万(小数点后保存10位)的话,你要这样定义:models.FloatField(…,max_digits=19, decimal_places=10) 10、models.IntegerField   ---整形   用于保存一个整数
11、models.BigIntegerField   ---长整形
  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }
12、models.IPAddressField   ---字符串类型(ip4正则表达式)   一个字符串形式的 IP 地址, (如 “202.1241.30″)。
13、models.GenericIPAddressField   ---字符串类型(ip4和ip6是可选的)   参数protocol可以是:both、ipv4、ipv6   验证时,会根据设置报错
14、models.NullBooleanField   ---允许为空的布尔类型   类似 BooleanField, 不过允许 NULL 作为其中一个选项。 推荐使用这个字段而不要用 BooleanField 加 null=True 选项。 admin 用一个选择框     <select> (三个可选择的值: “Unknown”, “Yes” 和 “No” ) 来表示这种字段数据。
15、models.PositiveIntegerField   ---正Integer   类似 IntegerField, 但取值范围为非负整数(这个字段应该是允许0值的…可以理解为无符号整数)
16、models.PositiveSmallIntegerField   ---正smallInteger  正小整型字段,类似 PositiveIntegerField, 取值范围较小(数据库相关)SlugField“Slug” 是一个报纸术语。 slug 是某个东西的小小标记(短签), 只包  含字母,数字,下划线和连字符。它们通常用于URLs。 若你使用 Django 开发版本,你可以指定 maxlength。 若 maxlength 未指定, Django 会使用默认长度: 50,它接受一个额外的参数:     prepopulate_from: 来源于slug的自动预置列表 17、models.SlugField   ---减号、下划线、字母、数字   它们通常用于URLs。
18、models.SmallIntegerField   ---数字   数据库中的字段有:tinyint、smallint、int、bigint.   类似 IntegerField, 不过只允许某个取值范围内的整数。(依赖数据库)
19、models.TextField   ---字符串=longtext ,一个容量很大的文本字段, admin 管理界面用 <textarea>多行编辑框表示该字段数据。 20、models.TimeField   ---时间 HH:MM[:ss[.uuuuuu]]   时间字段,类似于 DateField 和 DateTimeField。
21、models.URLField   ---字符串,地址正则表达式   用于保存URL。若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在(即URL是否被有效装入且没有返回404响应).
22、models.BinaryField   ---二进制
23、models.ImageField   ---图片   类似 FileField, 不过要校验上传对象是否是一个合法图片。它有两个可选参数:height_field 和 width_field,如果提供这两个参数,则图片将按提供的高度和宽度规格保存。   该字段要求 Python Imaging 库。
24、models.FilePathField   ---选择指定目录按限制规则选择文件,有三个参数可选, 其中”path”必需的,这三个参数可以同时使用, 参数描述:   path:必需参数,一个目录的绝对文件系统路径。 FilePathField 据此得到可选项目。 Example: “/home/images”;   match:可选参数, 一个正则表达式, 作为一个字符串, FilePathField 将使用它过滤文件名。 注意这个正则表达式只会应用到 base filename 而不是路径全名。 Example: “foo。*\。txt^”, 将匹配文件 foo23.txt 却不匹配 bar.txt 或 foo23.gif;
  recursive:可选参数, 是否包括 path 下全部子目录,True 或 False,默认值为 False。     match 仅应用于 base filename, 而不是路径全名。 如:FilePathField(path=”/home/images”, match=”foo.*”, recursive=True)…会匹配 /home/images/foo.gif 而不匹配 /home/images/foo/bar.gif   25、models.FileField   ---文件上传字段。 要求一个必须有的参数: upload_to, 一个用于保存上载文件的本地文件系统路径。 这个路径必须包含 strftime formatting, 该格式将被上载文件的 date/time 替换(so that uploaded files don’t fill up the given directory)。在一个 model 中使用 FileField 或 ImageField 需要以下步骤:在你的 settings 文件中, 定义一个完整路径给 MEDIA_ROOT 以便让 Django在此处保存上传文件。 (出于性能考虑,这些文件并不保存到数据库。) 定义 MEDIA_URL 作为该目录的公共 URL。 要确保该目录对 WEB 服务器用户帐号是可写的。在你的 model 中添加 FileField 或 ImageField, 并确保定义了 upload_to 选项,以告诉 Django 使用 MEDIA_ROOT 的哪个子目录保存上传文件。你的数据库中要保存的只是文件的路径(相对于 MEDIA_ROOT)。 出于习惯你一定很想使用 Django 提供的 get_<fieldname>_url 函数。举例来说,如果你的 ImageField 叫作 mug_shot, 你就可以在模板中以 {{ object。get_mug_shot_url }} 这样的方式得到图像的绝对路径。   26、models.PhoneNumberField   ---一个带有合法美国风格电话号码校验的 CharField(格式:XXX-XXX-XXXX) 27、models.USStateField   ---美国州名缩写,由两个字母组成(天朝人民无视)。 28、models.XMLField   ---XML字符字段,校验值是否为合法XML的 TextField,必须提供参数:   schema_path:校验文本的 RelaxNG schema 的文件系统路径。

  

django之models学习总结的更多相关文章

  1. 网站开发学习Python实现-Django的models学习-生鲜项目(6.3.2)

    @ 目录 1.说明 2.模型类的设计 3.代码的具体实现 4.详情地址 关于作者 1.说明 models是django的很重要的部分,所以深入研究. 本文章的所研究项目为黑马教育python课程中的项 ...

  2. [Django笔记] models 深入学习

    对着官方文档撸一遍,顺便做点笔记 models 定义了本应用的数据库表结构.底层可以由不同的数据库封装实现,因为不同的数据库字段类型不一样,因此,跟以往直接用单一数据库(如mysql)建立的应用有很大 ...

  3. 【Django】--Models 和ORM以及admin配置

    Models 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库 <1>sqlite django默认使用sqlite的数据库 ...

  4. django form使用学习记录

    Django forms使用容易, 又方便扩展, 因此Django admin和CBVs基本都基于forms使用. 事实上, 由于django forms的强大验证功能, 大多数Django API ...

  5. 【Django】 初步学习

    这个系列(或者成不了一个系列..)预计会全程参考Vamei様的Django系列,膜一发.说句题外话,其实更加崇拜像Vamei那样的能够玩转生活.各个领域都能取得不小成就的人. [Django] ■ 概 ...

  6. 完整的Django入门指南学习笔记5

    前言 欢迎来到本系列教程的第5部分,在这节课,我们将学习如何保护视图防止未登录的用户访问,以及在视图和表单中访问已经登录的用户,我们还将实现主题列表和回复列表视图,最后,将探索Django ORM的一 ...

  7. Django应用:学习日志网站

    目录 一.创建虚拟环境(Windows) 二.创建项目 三.创建应用程序 四.创建网页:学习笔记主页 五.创建其他网页 六.用户输入数据 七.用户账户 八.让用户拥有自己的数据 九.设置应用程序样式 ...

  8. 完整的Django入门指南学习笔记2

    part2: 前沿 在第一节中,我们安装了项目所需要的一切:Python3.6以及在虚拟环境中运行的Django2.0,这部分教程继续在项目上编写代码. 开始写代码前,先讨论下项目的相关背景知识,然后 ...

  9. Django 2.0 学习(07):Django 视图(进阶-续)

    接Django 2.0 学习(06):Django 视图(进阶),我们将聚焦在使用简单的表单进行处理和精简代码. 编写简单表单 我们将用下面的代码,来替换之前的detail模板("polls ...

随机推荐

  1. 热血沙城-3.2移植-古月-cocos2dx源码

    最近发现我去年学习2dx的时候移植过的一个游戏现在被放在网上出售 真是有点想笑 本人比较喜欢武侠风格的游戏,当时9秒开源了热血沙城 本着学习的态度 从2.1.2移植到3.2 用了一周的时间  中间各种 ...

  2. APP之红点提醒三个阶段

    下面这个页面就是我们进入APP后的主界面.客户选项的红点上数字就是显示我们没有查看的客户总数量.   当我们切换到客户这个fragment时,会显示贷款客户数量与保险客户数量.   当我们随便点击入一 ...

  3. 0java之泛型解说

    1.集合中只能装入引用数据类型,不能装入基本数据类型.如,装入int类型的数值123会自动装箱. 2.开发人员装入集合的数据类型不确定,所以它被设计成可以装入所有的Object. 3.新的问题产生,装 ...

  4. 3The superclass “javax.servlet.http.HttpServlet" was not found on the Java Build Path 之一

    另外一篇短文里还有第三种解决方案,查看请点击这里 1.异常信息 创建maven web项目时,出现 The superclass “javax.servlet.http.HttpServlet&quo ...

  5. eclipse安装Android插件

    1.首先下载Eclipse for android,点击进入.下载这个版本可以省去ADT配置() 2.下载符合你电脑的版本 2.现在Android SDK,地址:http://tools.androi ...

  6. beautifulsoup之CSS选择器

    BeautifulSoup支持大部分的CSS选择器,其语法为:向tag或soup对象的.select()方法中传入字符串参数,选择的结果以列表形式返回. tag.select("string ...

  7. webservice双向验证

    ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtoco ...

  8. VC++下使用ADO操作数据库

    VC++下使用ADO操作数据库主要要用到 _ConnectionPtr,_CommandPtr,_RecordsetPtr三个ADO对象指针,我查找了相关资料,发现网上源码很多,但是都相对凌乱,于是自 ...

  9. 审计系统---堡垒机项目之用户交互+session日志写入数据库[完整版]

    2018-06-20 时隔一个多月,忘记了之前的所有操作,重拾起来还是听不容易的,想过放弃,但还是想坚持一下,加油. 世界杯今天葡萄牙1:0战胜摩洛哥,C 罗的一个头球拯救了时间,目前有4个射球,居2 ...

  10. php算法基础----时间复杂度和空间复杂度

    算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上, ...