Xml OpenERP-使用外部id比较字段?

Xml OpenERP-使用外部id比较字段?,xml,postgresql,view,openerp,Xml,Postgresql,View,Openerp,是否可以使用外部id(而不是内部id)比较视图中的字段。我需要这个,因为我需要根据其他字段隐藏一些字段。我可以使用内部数据库id来实现这一点。所以,如果用户选择例如country(在视图中它检查该国家id),如果id与比较的视图中的id匹配,它将显示另一个字段。例如: <field name="some_field" attrs="{'invisible': [('country_id','!=',10)]}" /> 这一个可行,但它并不真正可靠。想象一下,如果id发生

是否可以使用外部id(而不是内部id)比较视图中的字段。我需要这个,因为我需要根据其他字段隐藏一些字段。我可以使用内部数据库id来实现这一点。所以,如果用户选择例如country(在视图中它检查该国家id),如果id与比较的视图中的id匹配,它将显示另一个字段。例如:

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

这一个可行,但它并不真正可靠。想象一下,如果id发生变化(例如,安装我的模块,该id已经被其他国家使用),那么当选择不同的国家时,它将显示
some\u字段。而这并非本意。
所以我考虑使用外部id,这是在xml文件的表中添加数据时提供的。该id是静态的,实际上对于要安装该模块的任何数据库都应该相同(因为该id是在模块本身中提供的,而不是由数据库自动创建的)。
是否有办法使用相同的功能,但使用外部id?
当然,也许有人知道解决这个问题的更好方法


另外,添加另一个类似布尔值的字段以显示隐藏
某些字段
不是一个选项,因为它完全取决于在模块安装时添加的特定值。

您可以使用“字段”“视图”“获取”来添加此功能。比如说

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

对于非常特殊的问题,我在那里问过。我在stackoverflow中问过,因为它有更大的社区,所以我希望有人知道答案,因为在help.openerp.com中没有得到任何答案。如果你这样做,最好链接到任何早期的相关问题。问题与这里相同。走到这里: