django模型二
django模型二
- 常用模型字段类型
- IntegerField → int
- CharField → varchar
- TextField → longtext
- DateField → date
- DateTimeField → datetime
- AutoField → int (自增长)
- Field的常用参数
- primary_key:是否设置为主键
- unique:是否唯一
- null:指定是否为空,默认是False
- blank:等于True时form表单验证时可以为空,默认False
- default:设置默认值
- DateField.auto_now:每次修改都会将当前时间更新进去,只有调用:QuerySet.update方法将不会调用,这个参数只是Date和DateTime以及TimModel.save()方法会调用类的时候才有的
- DateField.auto_now_add:第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值
- 常用查询
- 通过模型类上的管理器(模型类.objects)来构造QuerySet(数据库中对象的集合:select语句)
- all() :获取所有记录 返回的是queryset,支持切片
- first() :获取的是第一条记录,返回的是对象
- last():获取最后一条,返回的是对象
- get(**kwargs):根据给定的条件,获取一个对象,如果有多个对象符合,则会报错
- fillter(**kwargs):根据给定的条件,获取一个过滤后的queryset
- exclude(**kwargs):和fillter的作用相反
- 多条件的QR连接,用到Q对象 (django.db.models.Q)
- from django.db.models import Q
- 模型类.objects.fillter(Q(age=0)|Q(age=1))
- values(*filed):返回一个queryset,返回一个字典列表,而不是数据对象only(*filed):返回queryset,对象列表,注意only返回一定包含主键字段
- 模型类.objects.values(字段变量名)
- 可通过列表取值的方法直接取出value
- defer(*field):用法和only一样,作用和only相反
- onder_by:根据给定的字段排序,默认从小到大;倒序只需在所要查询的字段的前面加上一个减号就好了
- 切片:和Python的列表切片用法相似,不支持负索引,数量大时不用步长
- 切片之后,不在支持附加过滤条件与排序
- 常用聚合条件查询
- exact //支持 get fillter exclude
- 准确匹配
- 模型类.objects.get(id__exact=0)
- 查询该表里的id=0的信息
- 模型类.objects.get(id__exact=0)
- 准确匹配
- iexact
- 不区分大小写的匹配(模糊匹配)
- contains
- 包含匹配,找到包含所传入的对象的值
- icontains
- 不区分大小写的包含匹配
- in
- 给定范围查询,返回查到的对象
- 模型类.objects.get(id__in=[给定的范围])
- 模型类.objects.get(id__in=[给定的范围])
- 给定范围查询,返回查到的对象
- range
- 给定的范围查询,返回所有范围对象
- 模型类.objects.get(id__range(给定的范围)
- 模型类.objects.get(id__range(给定的范围)
- 给定的范围查询,返回所有范围对象
- gt
- 查询大于某一范围的对象并返回
- 模型类.objects.get(id__gt=给定的值)
- 模型类.objects.get(id__gt=给定的值)
- 查询大于某一范围的对象并返回
- gte
- 查询大于等于某一范围的值并返回
- 模型类.objects.get(id__gte=给定的值)
- 模型类.objects.get(id__gte=给定的值)
- 查询大于等于某一范围的值并返回
- lte
- 查询小于等于某一范围的值并返回
- 查询小于等于某一范围的值并返回
- lt
- 查询小于某一范围的值并返回
- 查询小于某一范围的值并返回
- startswith
- 查询以某某开头的对象并返回
- 大小写敏感
- istartwith
- 查询以某某开头的对象并返回
- 大小写不敏感
- endswith
- iendswith
- isnull
- exact //支持 get fillter exclude
- 聚合查询
- from django.db.models import Avg, Max, Count, Sum
- count // 计数
- 可跟不同的对象结合使用
- 模型类.objects.get(id__gte=给定的值).count()
- 模型类.objects.all().count()
- 模型类.objects.get(id__gte=给定的值).count()
- 可跟不同的对象结合使用
- avg // 平均数
- 模型类.objects.aggregate(age_avg=Avg('age'))
- 查询年龄的平均数
- 模型类.objects.aggregate(age_avg=Avg('age'))
- max