一、常用的模型字段类型及字段参数
1、常用的模型字段类型
(参考文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types)
(1)常用的字段类型的映射关系:

(2)必须明白的常用的字段类型:
1. IntegerField : 整型,映射到数据库中的int类型。
2. CharField: 字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。
3. TextField: 文本类型,映射到数据库中的text类型。
4. BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。
5. DateField: 日期类型,没有时间。映射到数据库中是date类型,在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设DateField.auto_now_add当对象第一次被创建时自动设置当前时间。
6. DateTimeField: 日期时间类型。映射到数据库中的是datetime类型,在使用的时候,传递datetime.datetime()进去。
**7、AutoField:自定义主键的时候用的字段类型,默认为整型,并且只要一个参数即可,即AutoField(primary_ke=True)就可以自定义一个主键了。在实际情况下模型类里面会自动创建主键,不需要我们自定义。
2、 字段参数
(官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-options)
(1)Field的常用参数:
1、primary_key: 指定是否为主键。
2、unique: 指定是否唯一。
3、null: 指定是否为空,默认为False。
4、blank: 等于True时form表单验证时可以为空,默认为False。
5、default: 设置默认值。
6、DateField.auto_now: 每次修改都会将当前时间更新进去,只有调用QuerySet.update方法将不会调用。这个参数只是Date字段数据类型和DateTime字段数据类型以及TimModel.save()方法才会写这个参数。
7、DateField.auto_now_add: 第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值
3、具体例子(在views.py文件下写代码)
(1)创建模型类

注意:当用CharField字段类型的时候一定要用max_length参数,否则报错。
(2)执行生成并且迁移映射文件的命令后,查看数据表。

(3)插入数据

(4)查看插入的数据.

二、常用的查询
1、 查询的基本规则
(1)通过什么来进行查询?
通过模型类上的管理器来构造QuerySet。
(2)模型类上的管理器是啥?
模型类.objects
(3)QuerySet 表示数据库中对象的集合,可以等同于select 语句。
2、常用的查询方法(采用的是User模型类):

1、 first() 获取第一条数据,返回的是一个对象
2、last() 获取最后一条数据,返回的也是一个对象
思考:排序规则? 默认通过主键。通过_meta 设置
3、 get(**kwargs) 根据给定的条件,获取一个对象,如果有多个对象符合则保存
4、all() 获取所有记录,返回的是queryset
5、filter(**kwargs) 根据给定的条件,获取一个过滤后的queryset,多个条件使用and连接。
6、 exclude(**kwargs) 跟filter使用方法一致,作用想反,它是排除。
7、多条件的OR连接 用到Q对象,django.db.models.Q
8、values(*fields) 返回一个queryset,返回一个字典列表,而不是数据对象。
9、 only(*fiels) 返回querySet ,对象是列表,注意only一定包含主键字段
10、 defer(*fields) 返回一个QuerySet,作用和only相反
11、 order_by(*fields) 根据给定的字段来排序 默认是升序,字段名前加上 ‘-’代表反序
12切片 和python的列表切片用法相似,不支持负索引,数据量大时不用步长
*** 切片过后,不再支持,附加过滤条件与排序








3、 常用的查询条件:

注意:查找对象的条件的意思是传给以上方法的一些参数。相当于是SQL语句中的where语句后面的条件,语法为字段名__规则(是连着2个下划线哦)



4、 聚合查询函数的用法
(1)导入式子:
from django.db.models import Count, Avg, Max, Min, Sum
注意:通过queryset的aggregate方法来实现相应的功能
(2)示例图如下所示:


5、 分组聚合方式(分组在操作中一般都要聚合)
(1)结合 values,annotate 和聚合方法一起实现(例如:查询男生有几个,女生有几个)
(2)示例图如下所示:


三、表关系的实现
1、 表基本的三种关系

2、 表关系图(E-R图):

3、 表关系的例子:
(1)分析表关系并且创建E-R图

(2)创建模型类:


(3)查看数据库中创建的表:
写好模型类后,执行生成映射文件的命令:

执行完makemigrations和migrate的命令后,在数据库我们能看到5张表,其中多对多关系的ManyToManyField方法自动生成了关系表.