国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

介紹Python的Django框架中的QuerySets

2020-02-23 00:48:53
字體:
來源:轉載
供稿:網友

 Django的QuerySets酷斃了!

在本文中我將解釋一下QuerySets是什么,它是如何工作的(如果你對它已經熟悉了,你可以直接跳到第二部分),我認為如果可以的話你應該總是返回QuerySets對象,下面讓我來談談如何做。
QuerySets很酷

QuerySet,本質上是一個給定的模型的對象列表。我說“列表”而不是“組”或更正式的“集合”因為它是有序的。事實上,你可能已經熟悉如何獲得QuerySets,因為這就是你調用variousBook.objects.XXX()方法后得到的對象。例如,考慮下面的語句:
 

Book.objects.all()

all()返回的就是Book實例的一個QuerySet,它正好包括allBookinstances,下面的其他調用你可能已經知道:
 

# Return all books published since 1990Book.objects.filter(year_published__gt=1990) # Return all books *not* written by Richard DawkinsBook.objects.exclude(author='Richard Dawkins') # Return all books, ordered by author name, then# chronologically, with the newer ones first.Book.objects.order_by('author', '-year_published')

關于 QuerySet s最酷的是,由于這些函數操作、返回的都是一個QuerySet,你可以把他們鏈起來:
 

# Return all book published after 1990, except for# ones written by Richard Dawkins. Order them by# author name, then chronologically, with the newer# ones first.Book.objects.filter(year_published__gt=1990) /      .exclude(author='Richard Dawkins') /      .order_by('author', '-year_published')

而且這并不是全部的,它更快!

    在內部,一個QuerySet可以被構造、過濾、切片及像普通變量那樣在沒有實際數據庫查詢的情況下隨便傳遞,在評估處理完QuerySet前不產生數據庫活動。

所有我們確認了QuerySets很酷,不是么?

盡可能的返回QuerySets

我最近曾在一個Django應用中用一個模型來表示樹(數據結構,不是圣誕裝飾)。這意味著每一個實例在樹上都有一個指向它父節點的鏈接。它看起來像這樣:
 

class Node(models.Model):  parent = models.ForeignKey(to='self', null=True, blank=True)  value = models.IntegerField()     def __unicode__(self):    return 'Node #{}'.format(self.id)     def get_ancestors(self):    if self.parent is None:      return []    return [self.parent] + self.parent.get_ancestors()

這工作的相當好。麻煩的是,我不得不添加另一種方法,get_larger_ancestors,它應該返回所有值大于當前節點的的父節點。這是我能實現這個:
 

def get_larger_ancestors(self):    ancestors = self.get_ancestors()    return [node for node in ancestors if node.value > self.value]

問題是,我基本上會在名單上審查兩次——Django一次,我自己一次。這讓我考慮到-如果get_ancestors返回QuerySet而不是列表會怎樣呢?我可以這樣做:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 全椒县| 志丹县| 乌兰县| 贵州省| 博客| 靖安县| 阳朔县| 巫山县| 芮城县| 阿坝县| 铁岭县| 溧水县| 章丘市| 屏南县| 康平县| 安仁县| 饶河县| 陈巴尔虎旗| 得荣县| 休宁县| 二连浩特市| 镶黄旗| 静宁县| 东辽县| 百色市| 宁城县| 许昌县| 临武县| 阳新县| 昭觉县| 民权县| 蓝田县| 礼泉县| 威海市| 晋江市| 肃南| 赣州市| 陇南市| 丹阳市| 奇台县| 土默特右旗|