0

我知道用“readonly”属性将字段设为只读。是否可以将整个记录设为只读。这意味着表单中的所有字段都应在某个条件下为只读。

我发现的一种微不足道的方法是在表单中存在的所有文件中设置这个attrs="{'readonly':[('state','=','close')]}"

<field name="responsible_id" class="oe_inline" attrs="{'readonly':
<field name="type" attrs="{ 'readonly':[('state','=','close')]}" class="oe_inline"/>
<field name="send_response" attrs="{'readonly':[('state','=','close')]}"/>[('state','=','close')]}"/>

但是我不认为这是正确的。我希望有某种方法可以为表单设置通用的只读属性。请建议。

在我的示例中,人们可以查看所有记录并仅编辑他们自己的记录。

谢谢你。

4

2 回答 2

2

把它放在你的 Python 导入中:

from lxml import etree
from openerp.osv.orm import setup_modifiers

并像这样修改方法中的字段fields_view_get

def fields_view_get(self, cr, uid, view_id=None, view_type=None, context=None, toolbar=False, submenu=False):

    res = super(MyClass, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type,
                                                        context=context, toolbar=toolbar, submenu=submenu)

    if view_type == 'form':
        # Set all fields read only when state is close.
        doc = etree.XML(res['arch'])
        for node in doc.xpath("//field"):
            node.set('attrs', "{'readonly': [('state', '=', 'close')]}")
            node_name = node.get('name')
            setup_modifiers(node, res['fields'][node_name])

        res['arch'] = etree.tostring(doc)

    return res

这将修改表单上的每个字段以包含该attrs="{'readonly':[('state','=','close')]}"属性。

于 2014-11-24T16:02:36.877 回答
0

将一个组放在整个表单上并使用attrs使其只读。

于 2013-08-27T05:54:11.207 回答