Django模型

Django模型

分类

一对多

对象.模型类小写_set

grade.students_set

多对多

子主题 1

一对一

模型成员

类属性

objects

manager类型的一个对象 , 与数据库交互

未指定管理器时,默认为objects 为管理器

自定义管理器

作用; 向管理器类中添加额外的方法

修改管理器返回的集合 重写 set..queryset() 方法

Django 模型与数据库 交互的接口

adminobjects = models.Manager()

class StudentsManager(models.Manager):

def get_queryset(self):

return super(StudentsManager,self).get_queryset().filter(isdelete = False)

class Students(models.Model):

stuObj1 = models.Manager()

stuObj2 = StudentsManager()

创建对象

向数据库添加数据

创建对象时,不会对数据库进行读写操作, 当调用 save()时才与数据库进行交互 , 将对象保存到数据库表中

__init__ 方法在父类 models.Model 中使用,在自定义的模型中无法使用

方法

在模型类中增加一个类方法

子主题 1

在自定义管理器中添加一个方法

模型查询

查询集

从数据库获取对象的集合

查询集可以有多个过滤器

过滤器是一个函数,基于给于的参数限制查询集结果

查询集与sql 的 select 等价 过滤器与 where 条件等价

详解

在管理器上调用 过滤方法返回查询集

查询集通过过滤器筛选后返回新的查询集,可以写成链式调用

惰性执行 创建查询集不会有任何数据访问 调用数据时才会访问数据

直接访问数据

迭代

序列化

与if 合用

返回查询集的方法为过滤器

all()

filter()

filter(键 = 值,键 = 值)

filter(键 = 值).filter(键 = 值)

exclude()

过滤符合条件的数据

order_by()

排序

values()

一条数据就是一个对象(字典); 返回一个列表

get()

返回一个满足条件的对象

如果未找到符合条件的对象,模型类报异常

如果返回多个对象 也会报模型异常

count()

查询集中的对象个数

first()

查询集中的第一个对象

last()

查询集中的最后 一个对象

exists()

判断查询集中是否有数据

限制查询集

可以使用下标的方法限制

下标不能为负数

Students.stuObj2.all()[0:5]

查询集的缓存

每个查询集都包含一个缓存,对数据库进行最小化的访问

新建的查询,缓存首次为空,第一次对查询集求值,会发生数据缓存 , django会将查询的数据做一个缓存,以后直接使用缓存

字段查询

where 语句

语法 属性名称__运算符 = 值 (两个下划线)

外键属性名_id

转义类似 like 语句

比较运算符

exact

判断

filter(isdelete = False)

contains

是否包含

studentslist = Students.stuObj1.filter(sname__contains = 'yang')

startswithendswith

以values 开关,结尾

studentslist = Students.stuObj1.filter(sname__startswith = 'yang')

以上四种检索在最前面 加上 i 不区分大小写 iexact icontains ....

isnull isnotnull

是否为空

filter(sname__isnull = False)

in

是否包含在范围内

studentslist = Students.stuObj1.filter(pk__in = [1,2,3,4,5])

大于

gt大于

gte大于等于

studentslist = Students.stuObj1.filter(sage__gt = 30)

小于

lt

lte

year

month

day

week_day

hour

minute

second

studentslist = Students.stuObj1.filter(lastTime__year = 2017)

跨关联

处理 join 查询

语法

模型类名__属性名__比较运算符

查询快捷

PK (ID)字段

主键

聚合函数

aggregate()函数 返回聚合函数的值

Maxage = Students.stuObj1.aggregate(Max('age'))

Avg

Count

Max

Min

Sum

F对象

A属性与B属性之间的比较

支持 算数运算

Q对象

过滤器的方法中的关键字参数,条件为and 模式

进行 or 查询

studentslist = Students.stuObj1.filter(Q(pk__lte = 3) | Q(sage__gt = 50))

studentslist = Students.stuObj1.filter(~Q(pk__lte = 3))取反值

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180613G201K700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券