OpenERP 如何在many2one字段上使用域过滤器?
我刚接触OpenERP(版本7),正在写一个模块,想要扩展res.partner这个类,并添加了以下两个字段:
_columns = {
'member_ids': fields.one2many('res.partner', 'church_id', 'Members', domain=[('active','=',True)]),
'church_id': fields.many2one('res.partner', 'Church', domain="[('is_company','=',True)]")
}
我想要实现的是,当用户打开church_id这个视图时,只显示那些是教堂的合作伙伴。目前,它显示的是所有公司,因为我还没能正确设置条件。教堂是指那些在类别ID(res.partner.category)中对应教堂类别的公司。我尝试用一个功能字段来解决这个问题,但总是出现一些错误。以下这个函数正确返回了一个字典,里面包含了当前用户的ID和教堂的ID列表:
# Returns : {'user_id': [church_id1, church_id2, ...]}
def _get_church_ids(self, cr, uid, ids, field_name, arg, context=None):
sql_req = """
SELECT R.partner_id
FROM res_partner_res_partner_category_rel R
LEFT JOIN res_partner_category C ON ( R.category_id = C.id)
WHERE C.active = TRUE AND UPPER(C.name) = 'CHURCH'
"""
cr.execute(sql_req)
sql_res = cr.fetchall()
return dict.fromkeys(ids, sql_res)
对应的字段和视图:
'church_ids': fields.function(_get_church_ids, type="one2many", relation='res.partner', method=True)
<field name="church_ids" invisible="1"/>
我在church_id这个视图上尝试了以下条件,但总是得到同样的错误:
Uncaught Error: Expected "]", got "(name)"
<field name="church_id" attrs="{'invisible': [('is_company','=',True)]} domain="[('id','in',[church for church in church_ids[id]])]"/>
<field name="church_id" attrs="{'invisible': [('is_company','=',True)]} domain="[('id','in',[church[0] for church in church_ids)]"/>
有没有什么建议可以帮我解决这个问题?我已经花了几天时间在这上面,但一直没有找到办法。我也尝试用一个相关字段来实现,但我不太明白该怎么做……非常感谢你的帮助!
1 个回答
1
有人建议我,church_id这个字段应该和一个教堂表关联起来,但我只是想表示一个合作伙伴记录是否是教堂。因此,我可以创建一个叫做'is_church'的字段,类型为布尔值(也就是只有真和假两种状态),然后用一个筛选条件来找出所有'is_church'值为真的合作伙伴记录,像这样:
domain = "[('is_church','=',True)]"
这样我就可以去掉church_id这个字段,因为它和教堂表没有关系。
在.py文件中:
_columns{
'is_church': fields.boolean('Is a Church', domain="[('is_church', '=', True)]")
}