DJANGO 資料庫API (轉)
阿新 • • 發佈:2019-01-25
管理器提供的初始結果集描述了給定型別的所有物件.不過通常你只需要這個物件集合中的一小部分(一個子集).
要生這樣一個結果集,你需要對初始結果集進行優化定製處理, 增加一些限制條件直到描述的子集滿足你的需要.最常用的兩個定製結果集的方法是:
filter(**kwargs)返回一個匹配查詢引數的新的結果集.exclude(**kwargs)返回一個不匹配查詢引數的新的結果集.引數格式在下面 "欄位查詢" 小節有描述.
這兩個方法的返回值都是結果集物件,因此結果集可以進行鏈式處理:
Poll.objects.filter( question__startswith="What").exclude( pub_date__gte=datetime.now()).filter( pub_date__gte=datetime(2005,1,1))
...以一個初始結果集作為引數, 然後進行過濾, 再進行排除, 再進行另一個過濾. 這樣得到的最終結果就一個問題開頭單詞是 "What", 釋出日期在 2005年1月1日至今的所有民意測驗的集合.
每個結果集都是一個獨一無二的物件. 以上操作的每一步都生成了一個新的結果集:
q1 = Poll.objects.filter(question__startswith="What") q2 = q1.exclude(pub_date__gte=datetime.now()) q3 = q1.filter(pub_date__gte=datetime.now())
這三步生成了三個結果集; 一個初始結果集包含所有的以"What"開頭的民意測驗, 兩個初始結果集的子集(一個排除條件,一個過濾條件).對原始結果集的改進過程並沒有影響到原始的結果集.
值得注意的是結果集的建立根本沒有訪問資料庫.只有當對結果集取值時才會訪問資料庫.