Django关于模型的全部大纲(学习笔记)
看看我做了一天的笔记,学习能说累吗
# 字段模型***************************************************************************************
models.AutoField() # 根据实际id自动增长的字段
models.CharField(max_length=字符长度) # 字符串
models.TextField() # 大文本
models.IntegerField() # 整数
models.DecimalField(max_digits=None, decimal_plaves=None) #小数 max_digits位数总数,dicimal_places小数点后的位数
models.FloatField() # python的float实例来表示浮点数
models.BooleanField() # true/false字段,默认表单控制是CheckboxInput
models.NullBooleanField() # 支持null,true,false
# 下面三个的参数是一样的,三个关于时间的字段
models.DateField(auto_now=False, auto_now_add=False) # 日期,auto_now:每当对象被修改自动设置该字段为当前时间, # auto_now_add:当对象地第一次被创建时,自动设置为当前时间
models.TimeField() # 时间
models.DateTimeField() # 日期+时间
#
models.FileField()
models.ImageField()
# 字段选项***************************************************************************************
null = True # True时将空值以null存储,默认是False,一般不用写,是数据库的范畴
blanke = True # True时,该字段允许为空白,默认值是False,是表单验证的范畴
db_column # 字段的名称,如果未指定,则使用属性名
db_index # 若为True,则在表中会以此字段创建索引
default # 默认值
primary_key # 为True则该字段成为模型主键
unique # 如果为True,则该字段在表中必须有唯一值
# 关系***************************************************************************************
ForeignKey # 一对多
ManyToManyField # 多对多,不常用
OneToOneField # 一对一,不常用
# 元选项***************************************************************************************
# 在模型类中定义的一个Meta类,用于设置原信息
class Meta:
db_table="自定义的表名" # 自定义表名
ordering=['id'] # 对象的默认排序字段,ordering=["id"]为升序,ordering=["-id"]为降序,注意排序会增加数据库开销
# 模型成员***************************************************************************************
# 类属性:objects 是Manager类型的一个对象,作用是与数据库进行交互
# 当定义模型没有指定管理器,则Django为模型创建一个管理器objects
# 可以自定义管理器 stuObj = models.Manager(),当自行指定了一个模型管理器,Django不在生成objects
# 模型管理器作用:可以向管理器类中添加额外的方法,
# 修改管理器返回的集合(原始查询集)==>重写get_queryset()
class StudentManager(models.Manager):
def get_queryset(self):
return super(StudentManager, self).set_queryset().filter(isDelete=False)
class Stuednt(models.Model):
studentManager = StudentManager() # 自己定义和修改的manager
studentManager2 = models.Manager() # 普通Manager,与obects 等效
# 创建对象***************************************************************************************
# 目的,向数据库中添加数据
# 当创建对象的时候,Django不会对数据库进行读写操作,调用save()时才与数据库交互,将对象保存到数据库
# 注意:__init__方法已经在父类models.Model中使用,在自定义的模型中无法使用
# 模型查询***************************************************************************************
# 查询集,表示从数据库里获取的对象集合
# 查询集可以有多个过滤器,过滤器就是一个函数,基于我们的参数限制查询结果
# 从sql角度来说,查询集会被映射成select语句,就像where条件
# 1.在管理器上的方法调用查询集
# 2.查询集经过过滤器筛选后返回查询集,所以可以写成链式调用
# 3.惰性执行:创建查询集不会创建数据库的访问,直到调用数据的时候才会访问数据
# 4.直接访问数据的情况也有:
# 4.1.迭代
# 4.2.序列化
# 4.3.与if合用
# 5.过滤器,返回查询集的方法称为过滤器
# 5.1. all()
# 5.2. filter(键=值,键=值) filter(键=值).filter(键=值)
# 5.3. exclude()过滤掉符合条件的数据,不常用
# 5.4. order_by()排序,不常用
# 5.5. values()一条数据就是一个字典,返回一个列表,和all()的区别在于返回的数据类似于json的列表
# 5.6. 返回的单个数据
# 5.6.1. get()返回一个满足条件的对象,
# 如果没有找到符合条件的对象,会引发一个DoesNotExist异常
# 如果找到多个对象,会引发MultipleObjectReturned异常
# 异常用try except捕获屏蔽
# 5.6.2. count()返回查询集对象个数
# 5.6.3. first()返回查询集第一个对象
# 5.6.4. last()返回最后一个数据
# 5.6.5. exists()判断查询集中是否有数据,True,False
# 6. 限制查询集[n,m],相当于limit start,count 的SQL语句
# 7. 查询集缓存,每个查询集都会包含一个缓存用来最小化数据库访问
# 第一次查询后Django会形成缓存
# 8. 字段查询,实现了sql中的where语句,作为方法filter(),exclude(),get()的参数
# 语法:属性名称__比较运算符=值
# 外键:属性名_id
# 转义:like语句中的%是为了匹配占位
# 8.1. exact:判断,大小写敏感,通常用=就可以了
# 8.2. contains:是否包含,写法根据语法规则为:sname__contains = "sun"
# 8.3. startswith、endswith:以某某开头或结尾
# 以上4种参数如果在参数前多一个‘i’就大小写不敏感,iexact,icontains,istartwith,iendswith
# 8.4. isnull,isnotnull是否为空
# 8.5. in 包含,写法:pk__in=[2.4.6.8]
# 8.6. gt大于 gte大于等于 lt小于 lte小于等于
# 8.7. 日期的几个:year,month,day,week_day,hour,minute,second,写法:lastTime__year=2017
# 8.8. 跨关联查询:处理join查询
# 语法:模型类名__属性名__比较运算符
# 8.9. 查询快键:pk 主键
# 9. 聚合函数
# 9.1. aggregate()函数返回聚合函数的值 Students.objects.aggregate(Max("sage")) # 与下面几个配合使用
# 9.2. Avg()
# 9.3. Max()
# 9.4. Min()
# 9.5. Count()
# 9.6. Sum()
# 10. F对象
# 可以使用模型的A属性和B属性进行比较
from django.db.models import F,Q
def grades(request):
g= Grades.objects.filter(ggirlnum__gt = F("gboynum"))
print(g)
return HttpResponse("ahsgdfjhagsf")
# 并且支持F对象的算术处理:F("字段")+20
# 11. Q对象
# 如果要使用or查询,需要使用Q对象,一般的过滤器方法中的关键字参数为And模式
stuList = Students.objects.filter(Q(pk__lt = 3) | Q(sage__gt = 50))
# Q对象前的~为取反,写法~Q(sage__lt=20)
# 如果只有一个对象,就是用于匹配的,跟没有Q是等效的
有用的话点个赞吧,是吧
|