次のオブジェクトと対応するビューを検討します。
class first_object(osv.osv):
_name = "first.object"
_columns = {
'id': fields.integer ('First ID'),
'flag': fields.boolean ('Flag'),
'second_object_id': fields.one2many('second.object','first_object_id')
}
class second_object(osv.osv):
_name = "second.object"
_columns = {
'id': fields.integer ('Second ID'),
'first_object_id': fields.many2one('first.object','random field'),
'field_x': fields.float('x',size=128),
'field_y': fields.float('y',size=128),
}
<record model="ir.ui.view" id="first_object_view_id">
<field name="name">Frist Object</field>
<field name="model">first.object</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form>
<notebook>
<page>
<field name="id"></field>
<field name="flag"></field>
<field name="second_object_id">
<tree editable="top">
<field name="field_x" attrs="{'invisible':[('flag','=',True)]}"/>
<field name="field_y"/>
</tree>
<form>
<field name="field_x"/>
<field name="field_y"/>
</form>
</field>
</page>
</notebook>
</form>
</field>
</record>
フラグという名前の最初のオブジェクトのフィールドに基づいている、ツリー内のfield_xという名前の2番目のオブジェクトのフィールドに対して現在持っている属性に注意してください。
まず、この場合の属性は完全に無視されます。なぜうまくいかないのかわかりません。次に、これが機能せず、属性がローカルフィールドを参照する必要があると仮定すると、非表示属性はツリービューでは機能せず、フォームビューでのみ機能します。ただし、ツリーに単純なinvisible = "1"を設定すると、問題なく機能します(これに頼ることはできません。属性で提供するルールが必要です)。何か案は?
編集:
問題は、TREEビューの属性を介してフィールドを非表示にする(invisible = "1"ではない)ようです。フォームで正常に動作します。これができれば、私の問題は解決します。
編集2:
many2oneとone2manyの代わりに、別々のビュー定義とローカルフィールドを試してみましたが、役に立ちませんでした。しかし、私はなんとかしてこれを達成することができましたinvisible="context.get('xxx',True/False)"
。問題は、条件が一致すると、条件が一致しない新しいレコードを作成した後でも表示されないままになることです。