Django中模型的檢視方式

2021-09-02 23:26:39 字數 3256 閱讀 9508

查詢集合:從資料庫中獲取物件的集合,從sql角度來說,查詢集合和select等價,過濾器像where和limit帶有條件的查詢

過濾器查詢:基於所給的引數限制查詢的結果

查詢集經過過濾器篩選後會返回新的查詢集,因此可以寫成鏈式過濾:eg

filter(鍵1=值1,鍵2=值2)等價於

filter(鍵1=值1).filter(鍵2=值2)

下面是返回多個結果集:

all()

filter()

exclude()

order_by()

values():乙個物件構成乙個字典,然後構成乙個列表返回

下面是返回乙個結果集:

get():返回單個滿足條件的物件,

如果未找到會引發『模型類.doesnotexist』異常

如果多條被返回,會引發』模型類.mutipleojectsreturned』

異常count():返回當前查詢結果的總條數

first():返回結果集合中第乙個物件

last():返回結果集合中最後乙個物件

exists():判斷查詢集合中是否有資料,如果有則返回true.

1.如果查詢結果是列表,可以使用下標的方式進行限制,等同於sql中limit和offset

2.索引不支援負數

3.使用下標後返回乙個新的查詢集,不會立即執行查詢

4.如果獲取乙個物件,直接用[0],等同於[0:1].get(),但是若果沒有資料,就會報indexerror異常,[0:1].get()會報『doesnotexist』異常

查詢集合的快取:

1.每個查詢集合都包含乙個快取來最小化對資料庫的訪問

2.在新建的查詢集合中,快取為空,首次對查詢集求值時候,會發生對資料庫的查詢,django會將查詢的結果存在查詢集合的快取中,並返回請求的結果,接下來對查詢集合求值將會重用快取的結果

情況一:這構成了兩個查詢集,無法重用快取,每次查詢都會與資料庫進行一次互動,增加了資料庫的負載

print([e.title for e in entry.objects.all()])

print([e.title for e in entry.objects.all()])

情況二:兩次迴圈使用同乙個查詢集,第二次使用快取中的資料

querylist=entry.objects.all()

print([e.title for e in querylist])

print([e.title for e in querylist])

3.何時查詢集不會被快取:當只對查詢集的部分進行求值時會檢查快取,但是如果這部分不在快取中,那麼接下來查詢返回的記錄將不會被快取,這意味著使用索引來限制查詢集將不會填充快取,如果這部分資料已經被快取,則直接使用快取中的資料

實現where條件查詢,作為方法的filter(),get(),exclude()方法的引數

形式:屬性名稱__比較運算子=值

對於外來鍵,使用「屬性名_id」表示外來鍵的原始值

轉義:like中使用%與,匹配資料中的%與,在過濾器中直接寫:

filter(title_contains=』%』)等同於where title like "%%%』』,表示標題中包含%的

exact:表示判等,大小寫敏感;如果沒有寫「 比較運算子」,表示判等

filter(isdelete=false)

contains:是否包含,大小寫敏感,

exclude(btitle__contains=『傳』)

startswith,endswith:以value值開頭或結尾,大小寫敏感

exclude(btitle__endswith=『傳』)

isnull,isnotnull:是否為空

filter(btitle__isnull=false)

在前面加個i表示不區分大小寫,iexact,icontains,istartswith,iendswith,

in:是否包含在範圍內

filter(pk__in=[1,2,3,4,5])

gt,gte,lt,lte,:大於,大於等於,小於,小於等於

filter(id__gt=3)

year,month,day,week_day,hour,minutes,second對日期間的型別的屬性進行運算

filter(bpub_date__year=1986)

filter(bpub_data__gt=date(1980,1,1))

跨關聯關係的查詢:處理join查詢

語法:模型類名 《屬性名》 《比較》

注:可以沒有__《比較》部分,表示等於,結果同inner join

可返向使用,即在關聯的兩個模型中都可以使用

filter(heroinfo_ hcontent

contains=『八』)

查詢的快捷方式:pk,pk表示primary key,預設的主鍵是id

filter(pk__lt=6)

f物件可以使用模型的字段a與字段b進行比較,如果a寫在了等號的左邊,則b出現在等號的右邊,需要通過f物件構造

list.filter(bread__gte=f(『bcommet』))

django支援對f()物件使用算數運算

list.filter(bread__gte=f(『bcommet』) * 2)

f()物件中還可以寫作「模型類__列名」進行關聯查詢

list.filter(isdelete=f(『heroinfo__isdelete』))

對於date/time欄位,可與timedelta()進行運算

list.filter(bpub_date__lt=f(『bpub_date』) + timedelta(days=1))

q物件過濾器的方法中關鍵字引數查詢,會合併為and進行

需要進行or查詢,使用q()物件

q物件(django.db.models.q)用於封裝一組關鍵字引數,這些關鍵字引數與「比較運算子」中的相同

from django.db.models import q

list.filter(q(pk

lt=6))

q物件可以使用&(and)、|(or)操作符組合起來

當操作符應用在兩個q物件時,會產生乙個新的q物件

list.filter(pk

lt=6).filter(bcommet

gt=10)

list.filter(q(pk

lt=6) | q(bcommet _gt=10))

使用~(not)操作符在q物件前表示取反

list.filter(~q(pk__lt=6))

Django版本檢視方式

windows系統下,在cmd命令視窗中輸入python進入python直譯器 linux系統下,直接使用終端呼叫python直譯器 接下來輸入 import django print django.version python2的格式 print django.version python3的格式...

Django制定模型的顯示方式

下面主要與管理站點的定製方式有關。對此,可編輯某某應用程式 這裡本人以blog為例 的admin.py 檔案,並對其予以修改,如下所示 from django.contrib import admin from models impot post admin.register post class ...

Django之使用模型API的方式

專案結構 mysite manage.py init py init py settings.py admin.py urls.py modes.py tests.py views.py mysite init py settings.py urls.py wsgi.py templates 注意 ...