如何在Odoo 8中使用fields_view_get?

时间:2015-11-11 15:47:57

标签: python xml python-2.7 odoo-8 odoo

我正在尝试根据条件制作字段readonly。这种情况是打开表单的用户属于特定组(这就是我无法使用attrsgroups来管理此项目的原因。)

我做了什么,而且我非常接近我的目的,就是覆盖fields_view_get方法,检查条件,并在必要时更改字段。

@api.model
def fields_view_get(self, view_id=None, view_type='form', toolbar=False,
                    submenu=False):
    res = super(res_partner, self).fields_view_get(
        view_id=view_id, view_type=view_type, toolbar=toolbar,
        submenu=submenu)
    my_group_gid = self.env.ref(
        'my_module.my_group').id
    current_user_gids = self.env.user.groups_id.mapped('id')
    if view_type == 'form':
        if my_group_gid in current_user_gids:
            doc = etree.XML(res['arch'])
            the_fields = doc.xpath("//field[@name='my_field']")
            the_field = the_fields[0] if the_fields \
                else False
            the_field.set('readonly', '1')
            res['arch'] = etree.tostring(doc)
    return res

它似乎运行良好,因为如果我点击 Developer Mode 下的 Fields View Get ,XML视图代码已经更改,我可以看到{{1 }}。但是,我总是可以编辑该字段。

我无法理解这一点,因为还有其他模块,其中字段的修改完全像这样,它们可以工作。

尽管如此,我仍在继续尝试,如果不是<field name="the field" attrs= ... readonly="1"/>属性,我会按照以下方式设置readonly,它会起作用:

modifiers

问题:我完全覆盖了该字段的所有修饰符(如the_field.set('modifiers', '{"readonly": true}') attrs等)。所以我想更新required属性,而不是覆盖它。我所做的是:

modifiers

当我尝试将字符串modifiers = the_field.get('modifiers') 转换为字典时,我收到错误。这是modifiers

的值
modifiers

任何人都可以解释为什么{"invisible": [["is_company", "=", true]]} 无法正常工作或为什么我无法将变量the_field.set('readonly', '1')转换为字典?

修改

好的,那个变量是JSON数据,所以我应该把它转换成字典,好像这样:

modifiers

现在我的问题只是第一个问题:

为什么我不能简单地使用import json modifiers_dict = json.loads(modifiers) 来管理我的目的?

1 个答案:

答案 0 :(得分:2)

This is what modifiers are

点是,openerp在视图中使用attrs属性来相应地设置修饰符属性,之后调用fields_view_get,因此如果你只是改变attrs它就不会工作,那么当你在fields_view_get范围内时,你也需要改变修饰符。