如何在 Odoo 8 中使用 fields_view_get?

How to use fields_view_get in Odoo 8?

我正在尝试根据条件创建一个字段 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

它似乎运行良好,因为如果我在 开发人员模式 下单击 Fields View Get,XML视图代码已更改,我可以看到 <field name="the field" attrs= ... readonly="1"/>。但是,我总是可以编辑字段。

我不太理解这个,因为还有其他模块,其中的字段完全像这样修改并且它们可以工作。

尽管如此,我一直在尝试,如果我用以下方式设置 modifiers 而不是 readonly 属性,它会起作用:

the_field.set('modifiers', '{"readonly": true}')

问题:我完全覆盖了该字段的所有修饰符(如 attrsrequired 等)。所以我想更新 modifiers 属性,而不是覆盖它。我做的是:

modifiers = the_field.get('modifiers')

当我尝试将字符串 modifiers 转换为字典时,出现错误。这是 modifiers:

的值
{"invisible": [["is_company", "=", true]]}

谁能解释一下为什么 the_field.set('readonly', '1') 不能正常工作,或者为什么我不能将变量 modifiers 转换成字典?

编辑

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

import json
modifiers_dict = json.loads(modifiers)

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

为什么我不能简单地使用 the_field.set('readonly', '1') 来管理我的目标?

This is what modifiers are

要点是,openerp 在视图中使用 attrs 属性来相应地设置修饰符属性,之后 fields_view_get 被调用,因此如果您只是更改 attrs 它会' 工作,那么当你在 fields_view_get.

内时,你也需要更改修饰符