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='XXXX'),都知道related_name的做用,A.FAN.all()是一組以A爲外鍵的B實例,可前面這樣的用法是查詢出全部(B.aa=A且B.bb=XXXX)的A實例,而後還能夠經過__各類關係查找,真赤激!!!
關於緩存: 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(),迭代器的用處就很少說了,根據具體需求狀況使用。