OpenERP - 使用外部ID比较字段?

时间:2013-08-13 12:13:02

标签: xml postgresql view openerp

是否可以使用外部ID(而非内部ID)比较视图中的字段。我需要这个,因为我需要根据其他字段隐藏一些字段。我可以使用内部数据库ID来完成这项工作。因此,如果用户选择例如country(在视图中它检查国家ID),如果id匹配以便进行比较,则显示另一个字段。例如:

<field name="some_field"
    attrs="{'invisible': [('country_id','!=',10)]}"
/>

这个有效,但它并不可靠。想象一下,如果id会改变(例如安装我的模块,其中某个其他国家已经使用了id),那么当选择不同的国家时它会显示some_field。这不是故意的。 所以我考虑使用外部id,在将数据添加到xml文件中的表时提供。该id是静态的,实际上对于您将安装该模块的任何数据库应该是相同的(因为该ID在模块本身中提供,不是由数据库自动创建的)。 有没有办法使用这个相同的功能,但使用外部ID? 当然也许有人知道更好的方法来解决这个问题吗?

P.S。添加另一个字段如boolean来显示隐藏some_field不是一个选项,因为它完全取决于将在模块安装时添加的特定值。

1 个答案:

答案 0 :(得分:1)

您可以使用fields_view_get添加此功能。例如

def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
    if context is None:context = {}
    res = super(your_osv_class_name, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=False)
    doc = etree.XML(res['arch'])
    nodes = doc.xpath("//field[@name='some_field']")
    id_found = self.pool.get('res.country').search(cr, uid,[('name','=','India')])[0]
    #or try to search for the id using the external id
    for node in nodes:
        node.set('attrs', "{'invisible':[('country_id','=',%s)]}"%id_found)
        setup_modifiers(node, res['fields']['some_field'])
    res['arch'] = etree.tostring(doc)
    return res