2014-10-27 56 views
2

我已将我的订单行设置为可编辑,并且想要删除删除按钮(如果它不处于草稿模式)。我尝试以下,但删除按钮仍然是:如何动态设置树视图的删除状态?

<xpath expr="//field[@name='order_line']//tree" position="attributes"> 
    <attribute name="delete" domain="[(parent.state,'!=','draft')]"/> 
</xpath> 

是否可以动态地设置删除=假基于父的状态草案?

我尝试这样做:

<record id="delete_drafts_only" model="ir.rule"> 
    <field name="name">You can only delete items with draft parents</field> 
    <field name="model_id" ref="sale.model_sale_order_line"/> 
    <field name="global" eval="True"/> 
    <field name="domain_force">[('parent.state', '=', 'draft')]</field> 
    <field name="perm_unlink" eval="True"/> 
</record> 

<record id="delete_drafts_only" model="ir.rule"> 
    <field name="name">You can only delete items with draft parents</field> 
    <field name="model_id" ref="sale.model_sale_order_line"/> 
    <field name="global" eval="True"/> 
    <field name="domain_force">[('parent.state', '!=', 'draft')]</field> 
    <field name="perm_read" eval="True"/> 
    <field name="perm_write" eval="True"/> 
    <field name="perm_create" eval="False"/> 
    <field name="perm_unlink" eval="False"/> 
</record> 

但它似乎并没有实际应用。似乎正在工作的唯一的东西是操纵ir_model_access,但它在全局切换,这不是我想要的。

enter image description here

+0

为什么不能只读?你需要编辑它吗? – StackUP 2014-10-28 02:33:55

+0

@StackUP我需要编辑我添加的1个字段,是的。 – 2014-10-28 05:48:37

回答

2

我已经something similar工作,还使用记录的规则。

这些行应具有删除访问权限,以便可以在表单中使用删除按钮,并且如果满足某些条件,则记录Rule应拒绝删除访问。

所以你的第二条记录规则应该工作。 问题在于删除按钮仍然可见,但规则会引发Access错误,从而有效地执行该错误。

你可以尝试删除global选项和分配规则的一组:

<record id="delete_drafts_only" model="ir.rule"> 
    <field name="name">You can only delete items with draft parents</field> 
    <field name="model_id" ref="sale.model_sale_order_line"/> 
    <field name="domain_force">[('parent.state', '!=', 'draft')]</field> 
    <field name="groups" eval="[(4,ref('base.group_user'))]"/> 
    <field name="perm_read" eval="True"/> 
    <field name="perm_write" eval="True"/> 
    <field name="perm_create" eval="False"/> 
    <field name="perm_unlink" eval="False"/> 
</record> 
+0

正确,所以我花了几个小时试图让这个工作再次。我的ir.rule似乎根本不起作用。只有从出售切换组权限'ir.model.access'似乎工作。如果你看看我的屏幕截图,我已经禁止在所有订单行规则中的任何状态下进行任何创建和删除操作,但它不会保留。在ir.model中组权限。access'总是覆盖'ir.rule'? – 2014-11-13 00:03:48

+0

反过来说:'ir.rule'覆盖(被检查_after_)'ir.model.access',所以'ir.model.access'应该更宽容,然后'ir.rule'添加某些限制条件。这个工作就是我作为例子链接的模块。 – 2014-11-13 08:46:14

+0

嗯,我想我尝试了选择加入和退出,但我会再试一次。无论如何,因为它即将超时,我给了你赏金。 – 2014-11-13 08:48:02

1

你几乎写的“ir.rule”解决方案的工作原理:删除按钮仍然保持可见,但是当你尝试保存,它给你一个无效访问的例外。

此外,背后的逻辑是不同的:为了“禁用”删除行,你应该使用负逻辑。这为我工作:

<record id="delete_drafts_only" model="ir.rule"> 
    <field name="name">You can only delete items with draft parents</field> 
    <field name="model_id" ref="sale.model_sale_order_line"/> 
    <field name="domain_force">[('state', '=', 'draft')]</field> 
    <field name="groups" eval="[(4,ref('base.group_user'))]"/> 
    <field name="perm_read" eval="False"/> 
    <field name="perm_write" eval="False"/> 
    <field name="perm_create" eval="False"/> 
    <field name="perm_unlink" eval="True"/> 
</record> 

我想语义是:

  • domain_force场点出其中记录了模型必须考虑到
  • perm_ *字段指明操作不能被执行(因此一个“假”值意味着该操作可以执行,反之亦然)
0

而不是删除,你可以使它不可见的给定标准

<xpath expr="//field[@name='order_line']//tree" position='attributes'> 
<attribute name='invisible' attrs="{'invisible':[('parent.state','!=','draft')]}">1</attribute> 
</xpath> 

这只是一个简单的想法..试试吧。

+0

他不想隐藏树,只是删除按钮。 – 2015-11-13 14:19:29