django常用的模型字段类型和常用的查询
- IntegerField : 整型,映射到数据库中的int类型。
- CharField: 字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。
- TextField: 文本类型,映射到数据库中的text类型。
- BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。
- DateField: 日期类型,没有时间。映射到数据库中是date类型,
在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add当对象第一次被创建时自动设置当前时间。 - DateTimeField: 日期时间类型。映射到数据库中的是datetime类型,
在使用的时候,传递datetime.datetime()进去。
例子理解
执行生成映射文件的命令后,查看数据表
Field字段常用的参数
- primary_key: 指定是否为主键。
- unique: 指定是否唯一。
- null: 指定是否为空,默认为False。
- blank: 等于True时form表单验证时可以为空,默认为False。
- default: 设置默认值。
- DateField.auto_now: 每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。
- DateField.auto_now_add: 第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值
对于CharField必须设置 max_length
常用的查询方法:
常用的查询条件:
- first() 获取第一条 返回的是对象
-
last() 获取最后一条 返回的也是一个对象
思考:排序规则? 默认通过主键。通过_meta 设置 -
get(**kwargs) 根据给定的条件,获取一个对象,如果有多个对象符合,保存
-
all() 获取所有记录 返回的是queryset
-
filter(**kwargs) 根据给定的条件,获取一个过滤后的queryset,多个条件使用and连接。
-
exclude(**kwargs) 跟filter使用方法一致,作用想反,它是排除。
-
多条件的OR连接 用到Q对象,django.db.models.Q
-
values(*fields) 返回一个queryset,返回一个字典列表,而不是数据对象。
-
only(*fiels) 返回querySet ,对象列表,注意only一定包含主键字段
-
defer(*fields) 返回一个QuerySet,作用和only相反
-
order_by(*fields) 根据给定的字段来排序 默认是顺序,字段名前加上 ‘-’代表反序
-
切片 和python的列表切片用法相似,不支持负索引,数据量大时不用步长
*** 切片过后,不再支持,附加过滤条件与排序
-
- 常用查询条件 filter,exclude, get
- exact
- iexact
- contains
- icontains
- in
- range
- gt
- gte
- lt
- lte
- startswith
- istartswith
- endswith
- iendswith
- isnull True False 对应 IS NULL IS NOT NULL
- 聚合
from django.db.models import Count, Avg, Max, Min, Sum
通过queryset的aggregate方法
Student.objects.aggregate(age_avg=Avg(‘age’)) # 计算平均年龄- count
- 平均值 Avg