Django models filter筛选条件详解
条件选取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.filter(pub_date__gte=datetime.date.today())表示为时间>=now,q1.exclude(pub_date__gte=datetime.date.today())表示为<=now
“在djangomodels中取得一个字段的distinct值”。
就是selectdistinctxxxfromtable_name...这样的功能。
使用values会生成ValuesQuerySet(形如N个dict组成的list),猜测大数据无额外性能影响,毕竟queryset系列都是使用时才查询操作的。
xxxx.objects.values("field_name").distinct()
或者
xxxx.objects.distinct().values("field_name")
补充知识:django中的objects.get和objects.filter方法的区别
为了说明它们两者的区别定义2个models
classStudent(models.Model): name=models.CharField('姓名',max_length=20,default='') age=models.CharField('年龄',max_length=20,default='') classBook(models.Model): student=models.ForeignKey(Student)
一.先说下django的obj.get():
django的get是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。
比如我数据库里有一条记录,记录的name的值是"django"的话,我用student=Student.objects.get(name='django'),
返回的是一个记录对象,你可以通过student.__dict__来查看,它返回的是一个字典的形式,{'key':valeus},key是字段的名称,而values是值的内容。
而如果我用get方法来查询一个数据库里不存在的记录,程序会报错。
比如:
student=Student.objects.get(name='python')
如果你用django的get去取得关联表的数据的话,而关键表的数据如果多于2条的话也会报错。
比如我的student表里有一个记录:
idnameage
1python24
book表:
idstudent_id
11
21
我用
student=Student.objects.get(name='python') book=Book.objects.get(student)
它也会报错,因为book表有2条记录和student表相匹配。
二.再说下djangofilter:
django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。
比如我数据库里有一条记录,记录的name的值是Python的话,我用
student=Student.objects.filter(name='python')
它返回的student是一个对象的列表,可以看的出来student[0]和上面的get方式返回的student的结果是一样的。
以上这篇Djangomodelsfilter筛选条件详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。