OpenERP域名:char比较

时间:2014-04-08 09:36:02

标签: openerp openerp-7

这是我试图做的事情:

<field name="of_num" domain="[('etat','=','Terminé')]"/>

其中'of_num'是一个many2one字段,'etat'是char类型的函数字段。

但它似乎无法正常工作。我仍然可以在下拉列表中获取所有记录。

我还尝试过其他一些没有unicode字符的文本,但仍然是相同的。

我还尝试使用'ilike'运算符,并尝试使用字段定义将域放在python代码中,但没有机会。

EDITED

我已经找到了问题的根源: 字段'etat'是计算但未存储,因为我使用'store = false'。

它正在使用store = True。 不过,我不想存储它,因为每次加载视图时都需要计算我的值。

有人可以帮助我这样做,而不必存储我的价值吗?谢谢

2 个答案:

答案 0 :(得分:0)

我发现解决问题的唯一方法是使用每次计算函数时存储和更新的布尔字段(函数字段&#39; etat&#39;)。 / p>

答案 1 :(得分:0)

使用fnct_search。对于功能领域,有一个名为&#39; fnct_search&#39;它返回一个搜索域条件。 例如

_columns = {
'a':fields.float('A'),
'b':fields.float('B'),
'total_fn': fields.function(_total, fnct_search=_total_search, string='Total'),
}
def _total(self, cr, uid, ids, name, arg, context=None):
    res = {}
    for obj in self.browse(cr, uid, ids, context):
       res[obj.id] = obj.a + obj.b
    return res

def _total_search(self, cursor, user, obj, name, args, domain=None, context=None):
    ids = set()
    for cond in args:
        amount = cond[2]
        cr.execute("select id from your_table having sum(a,b) %s %%s" % (cond[1]),(amount,))
        res_ids = set(id[0] for id in cr.fetchall())
        ids = ids and (ids & res_ids) or res_ids
    if ids:
        return [('id', 'in', tuple(ids))]
    return [('id', '=', '0')]

这里_total返回要显示的字段total_fn的值,fnct_search返回搜索需要的元组列表。所以每当我们提出论点时[(&#39; total_fn&#39;,&#39; =&#39;,1500)]