Python 如何在Odoo 8中使用字段\查看\获取?

Python 如何在Odoo 8中使用字段\查看\获取?,python,xml,python-2.7,odoo-8,odoo,Python,Xml,Python 2.7,Odoo 8,Odoo,我正试图根据条件将字段设置为只读。这个条件是打开表单的用户属于特定的组(这就是为什么我不能使用attrs或groups来管理它) 我所做的,也非常接近我的目的,就是覆盖字段\u view\u get方法,检查条件,并在必要时更改字段 @api.model def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False): res = sup

我正试图根据条件将字段
设置为只读
。这个条件是打开表单的用户属于特定的组(这就是为什么我不能使用
attrs
groups
来管理它)

我所做的,也非常接近我的目的,就是覆盖
字段\u view\u 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视图代码已经更改,我可以看到
。但是,我始终可以编辑该字段

我不能很好地理解这一点,因为还有其他模块中的字段被修改得与此完全一样,并且它们可以工作

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

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

modifiers = the_field.get('modifiers')
当我试图将字符串
修饰符
转换为字典时,我得到一个错误。这是
修饰符的值:

{"invisible": [["is_company", "=", true]]}
有人能解释一下为什么_field.set('readonly','1')
不能正常工作,或者为什么我不能将变量
修饰符转换成字典吗

编辑

好的,那个变量是JSON数据,所以我应该用一种很好的方式将它转换成字典,如下所示:

import json
modifiers_dict = json.loads(modifiers)
现在我的问题只是第一个:

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


关键是,openerp在视图中使用
attrs
属性来相应地设置修饰符属性,然后调用
fields\u view\u get
,因此如果您只是更改
attrs
,它将不起作用,然后,当您位于
字段\u view\u get

谢谢@Alessandro时,您还需要更改修饰符。这澄清了我的问题:)