【转载】odoo技术开发白皮书 第五部分 第七章 排序

转载:http://book.odoomommy.com/chapter5/README7.html

 

第七章 排序

基本的搜索排序

含有null值的字段排序

当一个字段为null,同时又参与倒序排序时,你可能会碰到null值排在你想要排序的值前面的问题。这种问题的起源在于pg中null在正序排序中默认是位于有效值的后面,倒序则排到最前而产生的。

对于PG的sql语法来说,解决方案非常简单,在sql的order关键字后添加nulls last即可。

select id,name,hot_level from product_template order by hot_level desc NULLS LAST limit 10 offset 0;

对于odoo来说,怎么使用呢?

odoo的search方法中虽然有order关键字,但是它只接受以逗号分隔的字符串,并不接受nulls last。

解决这种问题的方法就是利用odoo提供的原生能力,官方给出的demo在quant代码中:

# Copy code of _search for special NULLS FIRST/LAST order
self.sudo(self._uid).check_access_rights('read')
query = self._where_calc(domain)
self._apply_ir_rules(query, 'read')
from_clause, where_clause, where_clause_params = query.get_sql()
where_str = where_clause and (" WHERE %s" % where_clause) or ''
query_str = 'SELECT "%s".id FROM ' % self._table + from_clause + where_str + " ORDER BY "+ removal_strategy_order
self._cr.execute(query_str, where_clause_params)
res = self._cr.fetchall()
# No uniquify list necessary as auto_join is not applied anyways...
return self.browse([x[0] for x in res])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值