如何在 Odoo 8 中使用 fields_view_get?
How to use fields_view_get in Odoo 8?
我正在尝试根据条件创建一个字段 readonly
。这种情况是打开表单的用户属于特定组(这就是为什么我不能使用 attrs
或 groups
来管理它)。
我所做的,而且我非常接近我的目的,是覆盖 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}')
问题:我完全覆盖了该字段的所有修饰符(如 attrs
、required
等)。所以我想更新 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')
来管理我的目标?
要点是,openerp 在视图中使用 attrs
属性来相应地设置修饰符属性,之后 fields_view_get
被调用,因此如果您只是更改 attrs
它会' 工作,那么当你在 fields_view_get
.
内时,你也需要更改修饰符
我正在尝试根据条件创建一个字段 readonly
。这种情况是打开表单的用户属于特定组(这就是为什么我不能使用 attrs
或 groups
来管理它)。
我所做的,而且我非常接近我的目的,是覆盖 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}')
问题:我完全覆盖了该字段的所有修饰符(如 attrs
、required
等)。所以我想更新 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')
来管理我的目标?
要点是,openerp 在视图中使用 attrs
属性来相应地设置修饰符属性,之后 fields_view_get
被调用,因此如果您只是更改 attrs
它会' 工作,那么当你在 fields_view_get
.