django filter查询多选_django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct...

版权归作者所有,任何形式转载请联系作者。

作者:petanne(来自豆瓣)

来源:https://www.douban.com/note/301166150/

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实例,然后还可以通过__各种关系查找,很好用!!!

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 xxx from table_name ...这样的功能。使用values会生成ValuesQuerySet(形如N个dict组成的list),猜测大数据无额外性能影响,毕竟queryset系列都是使用时才查询操作的。

xxxx.objects.values("field_name").distinct()

#或者

xxxx.objects.distinct().values("field_name")

这两句生成的sql语句相同,原帖地址:http://blog.csdn.net/tsbob/article/details/1340293。

关于缓存:

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

python django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct[转]

1.多表连接查询:当我知道这点的时候顿时觉得django太NX了.   class A(models.Model):     name = models.CharField(u'名称')   clas ...

django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

1.多表连接查询:当我知道这点的时候顿时觉得django太NX了.  class A(models.Model):    name = models.CharField(u'名称')  class B ...

django orm 基于双下划线的跨表查询

一..基于双下划线的跨表查询(join实现) key:正向查询按字段,反向查询按表明小写 1.一对多跨表查询 查询在跨表中可以有两种方式,正向查询就是关键字段在你要搜索的表,没有关键字段就是反向查询 ...

Django之model补充:一对多、跨表操作

表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...

通过字典传递django orm的filter功能

class AppRightManageListView(ListView): template_name = 'rightmanage/list_apprightmanage.html' # mod ...

Python Django orm操作数据库笔记之外键和表关系

外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的. 外键的使用 使用外键前需要先确保相应外键已存储在数据库中(flask中 ...

django orm 多对多自定义第三张表

# -*- coding: utf-8 -*-# Generated by Django 1.11.11 on 2018-09-02 08:07from __future__ import unico ...

django orm 改动数据库中已存在的表(添加、删除、修改表字段)

python3 manage.py makemigrations --empty api # 因为我的models.py文件并直接在项目根目录,而是根目录下的api目录中 python3 manage ...

ORACLE根据两个表都含有的字段条件来判断两个表连接后有没有数据

A表  字段1 字段2 B表  字段1 字段3 A表的字段1=B表的字段1 SELECT DISTINCT A.字段2 FROM TABEL1  A ,TABEL2  B  WHERE  A.字段1 ...

随机推荐

06@LabVIEW发布功能总结

前言 在没有接触到LabVIEW强大的发布功能前,我时常发愁如何把自己的工具包给别人装上,有时候为了一些特定的安装,需要自己写一个一键安装的程序,时间长了发现还不如直接复制来的快,就是苦了那些用工具包 ...

OGLplus 0.33.0 发布,OpenGL 的 C 封装库

OGLplus 0.33.0 引入很多新的 OGLplus 和 OALplus 示例,更新了构建系统.CamMatrix::LookingAt 构造器.Texture::MaxLevel getter ...

手机中点击链接或button按钮出现黄色边框的解决办法

a,input,button{outline: none; -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-focus-rin ...

C#:基于WMI查询USB设备

来源:http://blog.csdn.net/jhqin/article/details/6734673 /* ------------------------------------------- ...

hdu 2155 小黑的镇魂曲(dp) 2008信息工程学院集训队——选拔赛

感觉蛮坑的一道题. 题意很像一个叫“是男人下100层”的游戏.不过多了个时间限制,要求在限定时间内从某一点下落到地面.还多了个最大下落高度,一次最多下落这么高,要不然会摔死. 一开始想dp的,然后想了 ...

distinct 去重复查询——两个表join 连接,去掉重复的数据

------distinct 去重复查询 select * from  accounts acc join (select distinct accid from roles) r on r.acci ...

reverse string | leetcode

思路:在原来的字符串后面添加上strlen-1个字符,返回 class Solution { public: string reverseString(string s) { unsigned int ...

OpenLayers实现覆盖物选择信息提示

var map; function init() { map = new OpenLayers.Map("map",{projection:"EPSG:3857" ...

【.Net基础拾遗】适配器模式(Adapter)与多态

今天晚上跟大家主要来讨论下适配器模式和多态,什么是适配器模式呢?先抛给大家一个问题:假设两个类Student和Teacher继承一个抽象基类Person,如何在不改动三类情况下实现多Student.T ...

【RequireJS】requireJS的基础知识

1. requirejs的优点 1)异步加载依赖的文件 2)管理文件加载顺序 3)管理文件加载的包路径 2. requirejs下载地点 https://github.com/jrburke/requ ...

你可能感兴趣的:(django,filter查询多选)