前言

先抛出一个问题。银行就相当于一个数据库,你去银行取钱存钱办卡销卡,是你告诉银行柜员方便还是你自己去操作电脑办卡取卡方便?(你还不一定会,假设自动存款机还没发明),object在数据库中就相当于银行里得银行柜员。

步入正题:

在django中的view.py中,我们可能回经常见到  book_set= Book.objects.all(),book_list = Book.objects.get()?

让我们疑惑的问题是,objects是个什么东西,book_set 和book_list 又是个神马东西?

object是Manager类型的对象,定义在from django.db import models中,是默认生成的,也就是objects = Modes.Manage() 。用途是数据库和模型对象交互的接口(api)。book_set返回的是个集合,book_list返回的是个列表。book = Book.objects.all(),这个翻译成银行得话就是,一个叫BOOK得人来到银行,通过一个名叫objects得柜员,查询BOOK得银行余额和银行卡信息,结果得到一个queryset对象

在book =BOOK.objects.get()或者book = BOOK.objects.all()中

  • BOOK是类名,就是你在model中创建的类
  • objects是django默认的管理器对象,就是刚才的比喻中的银行柜员,帮你完成各种操作。
  • get()或者all()是API,一种内置函数,也就是比喻钟银行柜员可以帮助我们完成的各种具体业务,不同的业务调用不同的API就可以了。
  • book通过all()得到的就是要给queryset()对象,也就是查询对象集合。

一,QuerySet 对象的创建方法

>> from blog.models import Blog
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
>>> b.save() 总之,一共有四种方法
# 方法 1
Author.objects.create(name="WeizhongTu", email="tuweizhong@163.com") # 方法 2
twz = Author(name="WeizhongTu", email="tuweizhong@163.com")
twz.save() # 方法 3
twz = Author()
twz.name="WeizhongTu"
twz.email="tuweizhong@163.com"
twz.save() # 方法 4,首先尝试获取,不存在就创建,可以防止重复
Author.objects.get_or_create(name="WeizhongTu", email="tuweizhong@163.com")
# 返回值(object, True/False)

备注:前三种方法返回的都是对应的 object,最后一种方法返回的是一个元组,(object, True/False),创建时返回 True, 已经存在时返回 False

对比得知,object这个管理器对象帮了我们很多忙,我们不用实例化对象,不用save(),而是交给Author.object去实现。

举个例子吧,如果我们把数据库比作银行,那么object对象就相当于柜员,能帮助你处理各种业务。如果没有得话,去银行取钱,我们得自己登记,自己去金库拿钱,记账,锁门.........不太现实吧。同理,你去数据库取个数据,没有objects对象,是不是很麻烦?

其实换个角度来讲,你去银行办理得一些业务,是银行柜员帮你在银行得数据库里进行得增删改查操作,银行柜员得名字可以叫object(默认得名字),当然也可以叫小李,小王,不过你得自定义罢了。xiaoli = models.Manage()也是可以得。

你看看,此时此刻,有没有认识到,一切皆对象,这个面向对象编程得伟大之处。

二,Django中查询常用的API

# 查询相关API:

#  <1>filter(**kwargs):      它包含了与所给筛选条件相匹配的对象

#  <2>all():                 查询所有结果

#  <3>get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

#-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------

#  <4>values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

#  <5>exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象

#  <6>order_by(*field):      对查询结果排序

#  <7>reverse():             对查询结果反向排序

#  <8>distinct():            从返回结果中剔除重复纪录

#  <9>values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

#  <10>count():              返回数据库中匹配查询(QuerySet)的对象数量。

# <11>first():               返回第一条记录

# <12>last():                返回最后一条记录

#  <13>exists():             如果QuerySet包含数据,就返回True,否则返回False。

另外关于ApI,给大家推荐一篇不错得文章

https://blog.csdn.net/cumtdeyurenjie/article/details/80211896

Django中object.all是什么东西的更多相关文章

  1. Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)

    Django中ORM介绍和字段及字段参数   Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...

  2. Django中的Object Relational Mapping(ORM)

    ORM 介绍 ORM 概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用 ...

  3. Django 中的 WSGI

    Django 源码小剖: Django 中的 WSGI 2013-09-06 22:31 by 捣乱小子, 334 阅读, 0 评论, 收藏, 编辑 Django 其内部已经自带了一个方便本地测试的小 ...

  4. [Django高级]理解django中的中间件机制和执行顺序

    原文来自 Understanding Django Middlewares, 这篇文章从整体上介绍了django中中间件定义,作用,和怎么样自己写中间件 –orangleliu. 注:middlewa ...

  5. Django中的分页,cookies与session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  6. Django中-事务操作

    如何在Django中进行事务操作呢? 近期,公司里要使用Django开发一套金融相关的系统. 涉及钱了.....安全安全安全 如果钱转到一半,系统崩了,咋办? 如果钱汇到一半,系统崩了,咋办? 如果东 ...

  7. django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066

    1 聚合和分组 聚合:对一些数据进行整理分析 进而得到结果(mysql中的聚合函数) 1aggregate(*args,**kwargs) : 通过对QuerySet进行计算 ,返回一个聚合值的字典. ...

  8. Django中的select_related与prefetch_related

      Django是一个基于Python的网站开发框架,一个很重要的特点就是Battery Included,简单来说就是包含了常规开发中所需要的一切东西,包括但不限于完整的ORM模型.中间件.会话处理 ...

  9. Django中的session和cookie及分页设置

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

随机推荐

  1. JSP 获取访问者真正的IP地址

    request.getRemoteAddr(),这种方法在大部分情况下都是有效的,但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了, 如果使用了反向代理软件,用re ...

  2. DCloud-MUI-JS:相关摘录

    ylbtech-DCloud-MUI-JS:相关摘录 1.返回顶部 1.JS initFun: function() { var oldBack = mui.back; mui.back = func ...

  3. Eclipse对web项目设置请求路径(与项目名称不同)

    可以在下图位置,进行修改 也可以修改项目的路径下的.settings文件夹下的org.eclipse.wst.common.component的value属性 <property name=&q ...

  4. webapi返回json格式优化 转载https://www.cnblogs.com/GarsonZhang/p/5322747.html

    一.设置webapi返回json格式 在App_Start下的WebApiConfig的注册函数Register中添加下面这代码 1 config.Formatters.Remove(config.F ...

  5. Git和Github操作

    个人笔记和总结.如有错误欢迎指出https://github.com/zhaozehua0312/leran-gitAndgithub 内容已发布github上

  6. Mysql 2019-07-01

  7. 实验报告(五)&第七周学习总结

    实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. 掌握创建自定义包 ...

  8. Python运行出错

    (1)ValueError: You are trying to load a weight file containing 6 layers into a model with 5 layers. ...

  9. JVM系列(一) — Jvm内存模型

    总结自<深入理解java虚拟机> 很多博客在讲虚拟机内存模型时,比较宽泛或者粗化,甚者,不准确,以下是我的一个笔记照片 运行时数据区可以分为两部分:线程共享区和线程私有区 一.线程共享区 ...

  10. Codeforces 1114C(数论)

    题面 传送门 分析 我们先考虑n!在10进制下有多少个0 由于10=2*5, 我们考虑n!的分解式中5的指数,答案显然等于\(\frac{n}{5}+\frac{n}{5^2}+\frac{n}{5^ ...