第七章 排序

基本的搜索排序

含有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])

results matching ""

    No results matching ""