django

对查询集排序和查询集的字段查找条件输入

2018-08-30  本文已影响27人  陆_志东

对查询到的结果排序

方式1:使用order_by方法

    Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
    #排序规则是两个,它的排序意思是先按照pub_date排序,如果pub_date有相同的记录,就按照headline来排序这些相同的记录
    
    #上面的结果将按照pub_date 降序排序,然后再按照headline 升序排序。
    #"-pub_date" 前面的负号表示降序排序。隐式的是升序排序。

方式2:定义默认的排序方式

在创建模型类的时候在元类选项里面加入排序规则
    class Meta:
        ordering = ["horn_length"]

对排序好的结果设置升序还是降序规则

调用asc()或者desc()方法

Entry.objects.order_by(Coalesce('summary', 'headline').desc())   最后会降序排序
Coalesce方法返回不为空的字段,可以理解为如果summary字段存在,就按照summary字段排序
如果summary字段不存在,就按照headline排序

判断返回查询集是否是排序过的查询集

使用ordered方法

如果QuerySet 是排好序的则返回True ,否则返回False

查询实例方法之filter方法,返回实例集合

返回一个新的QuerySet,包含与给定的查询参数匹配的对象。

查找的参数(**kwargs)应该满足本文字段查找中写的格式。在底层的SQL 语句中,多个参数通过AND 连接。

如果要使用复杂的查询,比如or查询,需要使用Q对象

查询实例中的字段方法返回字段值集合

values方法可以获取number字段的字典列表。

values_list可以获取number的元组列表。

values_list方法加个参数flat=True可以获取number的值列表。

class Building(models.Model):
    corporation = models.ForeignKey('company.Corporation', verbose_name=u'学校', related_name='buildings')
    number = models.CharField(u'楼栋编号', max_length=10, unique=True, db_index=True)
    create_time = models.DateTimeField(u'创建时间', auto_now_add=True)
In [1]: from apps.dormitory.models import Building
 
In [2]: buildings = Building.objects.values('number')
 
In [3]: buildings
Out[3]: [{'number': u'1'}, {'number': u'2'}, {'number': u'3'}, {'number': u'4'}, {'number': u'5'}]
 
In [4]: buildings_ = Building.objects.values_list('number')
 
In [5]: buildings_
Out[5]: [(u'1',), (u'2',), (u'3',), (u'4',), (u'5',)]
 
In [6]: buildings_list = Building.objects.values_list('number', flat=True)
 
In [7]: buildings_list
Out[7]: [u'1', u'2', u'3', u'4', u'5']

字段查找

字段查找里面写的方法适用于filter(),exclude(),get()方法

上一篇下一篇

猜你喜欢

热点阅读