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(),迭代器的用处就很少说了,根据具体需求状况使用。