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. JavaWeb学习—思维导图

  2. intellij idea elixir 插件

    intellij-elixir https://github.com/KronicDeth/intellij-elixir

  3. c# axPageLayoutControl 加数据框

    private void axPageLayoutControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IPageLayoutControl ...

  4. Android之TabHost实现Tab切换

    TabHost是整个Tab的容器,包含TabWidget和FrameLayout两个部分,TabWidget是每个Tab的表情,FrameLayout是Tab内容. 实现方式有两种: 1.继承TabA ...

  5. UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-5: ordin al not in range(128)——解决方案备注

    在vim中使用ycm插件时,偶尔会出现: “UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-5: ord ...

  6. .NET基础一

    .NET FrameWork是用于Windows的新托管代码编程模型,它包含CLR(Common Language Runtime)以及BCL(Base CLass Library)构成. 一.CLR ...

  7. RESTful 架构基础

    源自:https://mp.weixin.qq.com/s/wEr2jAVphzB1G_MISlLU0w REST(Representational State Transfer)架构风格是一种世界观 ...

  8. Linux 系统的网络基础_【all】

    网络基础 1.网线:568B: 白橙 橙色 白绿 蓝色 白蓝 绿色 白棕 棕色 2.交换机:电信号转发的网络设备,它可以为接入交换机的任2个网络节点设备提供电信号通信 3.路由器:连接局域网,广域网的 ...

  9. Linux at命令详解

    at 只能执行一次,在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程 anacron: 适合于非 7*24 类型的服务器,以天为周期或者在系统开机后执行任务的工作 它会定时检测服务 ...

  10. windows server 2016 无法联网问题

    首先,联网分解为两个问题,一.WLAN(无线网).二.以太网(有线网) 一 .WLAN问题解决方案 1.打开服务器管理器 2.添加角色和功能 3.一直点下一步到“功能”,勾选 DirectPlay 和 ...