关于openerp:如何在openerp7中使整条记录只读

How to make the whole record readonly in openerp7

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

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

1
2
3
<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')]}"/>

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

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

谢谢。


把它放在你的 Python 导入中:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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')]}" 属性。


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