django orm如何作一个优雅一点的filter?

如果有N多fitler条件,

单独放在一个长语句里显然不好看。

还好,

django支持字典方式的过滤条件,

写法大约与单独的长语里差不多。

如下:

    def get_queryset(self):
        filter_dict = dict()

        if self.request.query_params.get(‘site_name‘):
            filter_dict[‘site_name__name‘] = self.request.query_params.get(‘site_name‘)
        if self.request.query_params.get(‘order_no‘):
            filter_dict[‘order_no‘] = self.request.query_params.get(‘order_no‘)
        if self.request.query_params.get(‘version_name‘):
            if self.request.query_params.get(‘version_name‘) == "null":
                filter_dict[‘version_name__isnull‘] = True
            else:
                filter_dict[‘version_name__name‘] = self.request.query_params.get(‘version_name‘)
        # 以下过滤发布单的环境及时间(30天)
        # filter_dict[‘deploy_progress‘] = u"待发布"
        filter_dict[‘deploy_status__in‘] = ["UAT", "PRD", "SIM", "DRP", "BUILD"]
        current_date = timezone.now()
        filter_dict[‘change_date__gt‘] = current_date - timedelta(days=3000)

        return DeployPool.objects.filter(**filter_dict)
时间: 2024-10-10 15:49:04

django orm如何作一个优雅一点的filter?的相关文章

Django orm关系表的创建 、路由层以及视图层

一.Django 表关系的创建 1.表的对应关系 一对多 多对多 一对一 2.如何判断表的对应关系 利用换位思考的方式,分别站在两张表的角度上去思考 这里比如我们以图书管理系统为例来创建几个简单的表 图书表 出版社表 作者表 为了方便演示,这里我们就强行规定了表之间的关系: 图书和出版社是一对多的外键关系,一对多外键关系 将外键字段建在多的哪一张表上 图书与作者之间是多对多的外键关系,多对多的外键关系 外键字段无论建在那张表都可以,但是推荐你建在查询频率高的那张    表上 作者与作者与作者详情

Django ORM模型的一点体会

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational mapping)模型.这个ORM模型的设计比较简单,学起来不会特别花时间.不过,Django的ORM模型有自己的一套语法,有时候会觉得别扭.这里聊一下我自己的体会. 模型设计 这一部分算处理得比较好的部分.Django的数据模型的建立过程很简单,就是继承django.db.models中的Model类,

建立一个更高级别的查询 API:正确使用Django ORM 的方式(转)

add by zhj: 本文作者是DabApps公司的技术主管,作者认为在view中直接使用Django提供的ORM查询方法是不好的,我对此并不赞同,可能作者 写这篇文章是给Django的初学者看,所以在说明方法演进时有些罗嗦,至少方法1是没有必要说的. 本文介绍了如何给QuerySet类增加方法属性.作者写本文时,Django1.7还在开发中,没有发布.在Django1.7版本中提供了这个功能, 见https://docs.djangoproject.com/en/dev/releases/1

深入Django ORM的继承关系

ORM中通常将对象引用映射到外键,但是对于继承,关系数据库中没有自然有效的方法来对应.从数据存储的角度来看,在映射继承关系时,可以采用几种方式(参考JPA中的InheritanceType.定义): 使用单个表,在JPA中称作SINGLE_TABLE.整个继承树共用一张表.使用唯一的表,包含所有基类和子类的字段. 每个具体类一张表,在JPA中称作TABLE_PER_CLASS.这种方式下,每张表都包含具体类和继承树上所有父类的字段.因为多个表中有重复字段,从整个继承树上来说,字段是冗余的. 每个

Django ORM批量操作和foreign key

批量操作 Django ORM 中的批量操作 Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定义一个实例使用的django数据库模型Product,只是象征性地定义了两个字段name和price. from django.db import models class Product(models.Model): name = models.Cha

django orm 关联表查询

django orm 关联表数据,即sql的多表查询 例如两个表: Apply表中定义了字段position为foreignkey指向job表的id字段, 1.通过job表查找子表apply的字段信息: job.objects.values( 'id', 'job_type', 'apply__date_created') 连接符为小写的子表tablename+双下线+子表字段名即:apply__date_created 表示寻找Apply表中的date_created字段 等价于后台的SQL:

django orm中 get 与filter的区别

django orm中 get 与filter的区别: 以前误以为get与filter的区别仅仅是filter返回多条,而get仅支持一条记录,直到使用related_name属性 才发现,两者的差异远不止如此,最本质的区别是 filter返回的值是一个queryset对象, 而get 返回值是一个定义的model对象, 使用get 返回的结果去访问子表对象可以成功,而使用filter就会出错, 是因为queryset 对象没有realtaed_name属性,无法回溯到子表

[Django]orm中的外键级联删除

这里的系统环境为django1.6   os为win7 今天有个需求说的是添加一个地区表,然后用外键和几个非常重要的实体表来做关联(地区表作为其他表的外键),写完地区的删除操作的时候,测试了下代码,功能正常.可是眼睛移动到控制台输出的时候傻了 connexesql ->DELETE FROM `mngm_device` WHERE `mngm_device`.`area_id` IN (%s, %s, %s) connexesql ->DELETE FROM `ad_ad` WHERE `ad

django orm总结

目录1.1.1 生成查询1.1.2 创建对象1.1.3 保存修改的对象1.1.4 保存 ForeignKey 和 ManyToManyField 字段1.1.5 检索对象1.1.6 检索所有的对象1.1.7 过滤检索特定对象1.1.8 链接过滤1.1.9 过滤结果集是唯一 1.2.1 结果集是延迟的 1.2.2 其他的QuerySet方法1.2.3 限制 QuerySets1.2.4 字段查找1.2.5 跨关系查询1.2.6 过滤器可参考模型字段1.2.7 缓存查询集1.2.8 比较对象1.2.