栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Django Deliciousp高级过滤:如何使用Q对象进行复杂的查找

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django Deliciousp高级过滤:如何使用Q对象进行复杂的查找

你走在正确的轨道上。但是,

build_filters
应该将资源查找转换为ORM查找。

默认实现将查询关键字基于

__key_bits
,值对进行拆分,然后尝试查找所查找资源与其等效ORM之间的映射。

你的代码不应仅在此处构建过滤器。这是一个改进的固定版本:

def build_filters(self, filters=None):    if filters is None:        filters = {}    orm_filters = super(BusinessResource, self).build_filters(filters)    if('query' in filters):        query = filters['query']        qset = (     Q(name__icontains=query) |     Q(description__icontains=query) |     Q(email__icontains=query)     )        orm_filters.update({'custom': qset})    return orm_filtersdef apply_filters(self, request, applicable_filters):    if 'custom' in applicable_filters:        custom = applicable_filters.pop('custom')    else:        custom = None    semi_filtered = super(BusinessResource, self).apply_filters(request, applicable_filters)    return semi_filtered.filter(custom) if custom else semi_filtered

因为你使用的是Q对象,所以标准

apply_filters
方法不够聪明,无法应用你的自定义过滤器键(因为没有键),但是你可以快速覆盖它并添加一个名为“ custom”的特殊过滤器。这样,你
build_filters
可以找到一个合适的过滤器,构造它的含义,并将其作为自定义传递给apply_filters,后者将直接应用它,而不是尝试从字典中将其值作为一个项目拆包。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号