Django中object.all是什么東西


前言

先拋出一個問題。銀行就相當於一個數據庫,你去銀行取錢存錢辦卡銷卡,是你告訴銀行櫃員方便還是你自己去操作電腦辦卡取卡方便?(你還不一定會,假設自動存款機還沒發明),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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM