如何使用'喜欢' attrs属性中的operator隐藏或显示按钮

时间:2016-09-06 18:22:55

标签: openerp odoo-9

我需要隐藏或显示按钮,具体取决于Char字段中是否包含特定字符串。似乎'喜欢'运营商将是完美的。在我的xml中,我有:

 <record model="ir.ui.view" id="my_view">
     <field name="name">my.form</field>
     <field name="model">mymodule.my</field>
     <field name="arch" type="xml">
         <form string="My Form">
             <header>
                 <button name="test_like_1" type="object"
                         string="Should not appear"
                         attrs="{'invisible':[('state2','like','measure')]}"
                 />
                 <button name="test_like_2" type="object"
                         string="Should appear"
                         attrs="{'invisible':[('state2','not like','measure')]}"
                 />
...

State2包含&#39; measure,prelien&#39;,所以我希望第一个按钮是不可见的,第二个按钮是可见的。但是,两者都是看不见的。

我错过了什么?

修改

我运行了我认为Odoo将从该域创建的查询 -

select id, description, state2 from mymodule_my where state2 like '%measure%';

按预期运行,返回记录有&#34;衡量&#34;作为子串。不知何故,这个SQL没有被生成/使用。我的下一步是挖掘Odoo代码&amp;看看发生了什么。

任何人都可以提供有关正在发生的事情的见解吗?

3 个答案:

答案 0 :(得分:1)

我发现了问题 - available operators for attrs in a view最好地描述了问题并概述了一个可能的解决方案。要点是在attrs中指定的域在客户端的javascript中进行评估。 '喜欢'&amp; 'ilike'运营商没有实施。

您可以通过查看控制台来验证这一点。就我而言,我收到了大量的警告 -

Unsupported operator ilike in domain [["state2","ilike","measure"]]

我正在考虑按照建议的1扩展odoo / addons / web / static / src / js / framework / data.js中的compute_domain函数,或者只是简单地解决限制。

答案 1 :(得分:0)

你可以尝试

attrs="{'invisible':[('state2','in',['Measure','MEASURE','measure'])]}"

attrs="{'invisible':[('state2','not in',['Measure','MEASURE','measure'])]}"

您可能需要在列表中添加更多项目。我不确定是否支持喜欢和不支持,但这是我在其他插件中使用的方法。

答案 2 :(得分:0)

你正在比较字符串'state2'而不是字段state2的值,你也应该比较另一种方式,这不是最好的例子,但你应该得到我的的意思。

>>> 'measure,prelien' in 'measure'
False
>>> 'measure' in 'measure,prelien'
True
>>> 

第一个条件永远不会评估为真。你应该这样做

定义一个名为default的char字段,并将其默认值设置为'measure'并将其隐藏在视图中

measure = fields.Char('Measure', default='measure', store=False)

然后你的观点应该是这样的

<field name="measure" invisible="1" />

<button name="test_like_1" type="object"
                         string="Should not appear"
                         attrs="{'invisible':[('measure', 'like', state2)]}"
                 />
<button name="test_like_2" type="object"
                         string="Should appear"
                         attrs="{'invisible':[('measure', 'not like', state2)]}"
                 />