django model filter 條件過濾

2021-08-19 18:22:15 字數 2300 閱讀 9857

2013-09-09 19:43:55

1.多表連線查詢:當我知道這點的時候頓時覺得django太nx了。

class a(models.model):

name = models.charfield(u'名稱')

class b(models.model):

aa = models.foreignkey(a)

b.objects.filter(aa__name__contains='searchtitle')

1.5 我叫它反向查詢,後來插入記錄1.5,當我知道的時候瞬間就覺得django太太太nx了。

class a(models.model):

name = models.charfield(u'名稱')

class b(models.model):

aa = models.foreignkey(a,related_name="fan")

bb = models.charfield(u'名稱')

查a: a.objects.filter(fan__bb='***x'),都知道related_name的作用,a.fan.all()是一組以a為外來鍵的b例項,可前面這樣的用法是查詢出所有(b.aa=a且b.bb=***x)的a例項,然後還可以通過__各種關係查詢,真赤激!!!

2.條件選取queryset的時候,filter表示=,exclude表示!=。

queryset.distinct() 去重複

__exact 精確等於 like 'aaa'

__iexact 精確等於 忽略大小寫 ilike 'aaa'

__contains 包含 like '%aaa%'

__icontains 包含 忽略大小寫 ilike '%aaa%',但是對於sqlite來說,contains的作用效果等同於icontains。

__gt 大於

__gte 大於等於

__lt 小於

__lte 小於等於

__in 存在於乙個list範圍內

__startswith 以...開頭

__istartswith 以...開頭 忽略大小寫

__endswith 以...結尾

__iendswith 以...結尾,忽略大小寫

__range 在...範圍內

__year 日期欄位的年份

__month 日期欄位的月份

__day 日期欄位的日

__isnull=true/false

例子:>> q1 = entry.objects.filter(headline__startswith="what")

>> q2 = q1.exclude(pub_date__gte=datetime.date.today())

>> q3 = q1.filter(pub_date__gte=datetime.date.today())

>>> q = q.filter(pub_date__lte=datetime.date.today())

>>> q = q.exclude(body_text__icontains="food")

即q1.filter(pub_date__gte=datetime.date.today())表示為時間》=now,q1.exclude(pub_date__gte=datetime.date.today())表示為<=now

2013/12/12補充:

「在django models中取得乙個欄位的distinct值」。就是select distinct *** from table_name ...這樣的功能。使用values會生成valuesqueryset(形如n個dict組成的list),猜測大資料無額外效能影響,畢竟queryset系列都是使用時才查詢操作的。

***x.objects.values("field_name").distinct()

#或者***x.objects.distinct().values("field_name")

關於快取:

queryset是有快取的,a = a.objects.all(),print [i for i in a].第一次執行列印會查詢資料庫,然後結果會被儲存在queryset內建的cache中,再執行print的時候就會取自快取。

很多時候會遇到僅需判斷queryset是否為空的情況,可以1. if queryset:pass 2.if queryset.count>0:pass 3.if queryset.exists():pass. 三種方式效能依次提公升。

當queryset非常巨大時,cache會成為問題。此時可以queryset.iterator(),迭代器的用處就不多說了,根據具體需求情況使用。

避雷秘籍 iOS過審的基礎條件

初審通過了之後再提交的所有版本無論內容變化多大 名字是否改變 圖示是否改變,都視為更新包。遊戲更新包從提交完畢後等待時間為3 5天,進入審核後基本上1 2天出結果。如果你的更新包進入in review狀態超過3天都沒有結果,那麼80 會被打回。ios審核基本認識 好,下面我們來看看審核我們要怎麼做!...

快傳號怎麼過新手期,快傳號新手期轉正條件是什麼

什麼是快傳號新手期?1 快傳號註冊完成,通過資質審核之後即進入新手期。新手期轉正條件是什麼?1 已入駐平台7天以上 7天 2 當前快傳號指數達到200分 200分 3 當前信用指數為1000分,沒有違規操作。滿足以上三個標準後將自動轉正,屆時賬號上方的 新手期 標識會消失。入駐平台時間的計算規則是什...

瀏覽過此 的人還瀏覽過

資料庫設計很簡單 新增1個瀏覽日誌表 瀏覽日誌表表名 visitlog 字段 使用者id playerid 訪問模組id modelid 訪問時間 visittime 資料庫很簡單,難度主要在根據資料庫內的記錄計算出 瀏覽此商品的顧客還瀏覽 的列表!以下給出語句並做詳細解釋。查詢出模組的id,模組的...