ORM框架中,会给每一个模型类中的主键设置一个别名:pk
models.Projects.objects.filter(id=2)等效于models.Projects.objects.filter(pk=2)
1.filter()和exclude()查询类型
exclude()就是filter()的反向查询
1.1 filter()支持的查询类型:
models.模型类名.objects.filter(字段名__查询类型=xxxx)
补充:
filter(id__gt=2)
filter(id__gte=2)
filter(id__lt=2)
filter(id__lte=2)
1.2 exclude()反向查询
filter()方法支持的查询类型都支持
2.关联查询
当一个模型类中定义了外键时,在给这个模型类对应的表新增数据时,还必须指定将从表新增的数据关联到父表的哪条数据上
2.1 在Interfaces模型类中定义外键,关联Projects模型类
2.2 迁移
迁移后,Interfaces模型类生成的表中会自动 生成外键:外键名_id
2.3 外键关联创建
方式1:
2.3.1 先获取父表模型对象,此处只能用get(),不能用filter(),为何?
2.3.2 将获取的父表模型对象以外键字段名作为参数来传递
用postman请求后查看interfaces表
方式2:
2.3.1 先获取父表模型对象,进而获取父表的id值
2.3.2 将父表 主键值 以 外键名_id 作为参数来传递
2.4 外键关联查询
2.4.1 利用从表数据获取父表数据
利用 .父表模型类名小写 获取
获取包含注册接口的所有项目信息
Interfaces.objects.filter(name__contains='注册接口').first().projects
2.4.2 利用父表数据获取从表数据
利用 从表模型类名小写_set 获取
获取项目leader=jeanet的所有接口信息
models.Projects.objects.filter(leader__contains='jeanet')[0].interfaces_set.all()