Django中object.all是什麼東西

前言數據庫

先拋出一個問題。銀行就至關於一個數據庫,你去銀行取錢存錢辦卡銷卡,是你告訴銀行櫃員方便仍是你本身去操做電腦辦卡取卡方便?(你還不必定會,假設自動存款機還沒發明),object在數據庫中就至關於銀行裏得銀行櫃員。django

步入正題:編程

在django中的view.py中,咱們可能回常常見到  book_set= Book.objects.all(),book_list = Book.objects.get()?api

讓咱們疑惑的問題是,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對象spa

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

  • 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, 已經存在時返回 Falsecode

對比得知,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

相關文章
相關標籤/搜索