我已将order_line设置为可编辑,并且如果它不处于草稿模式,则要删除删除按钮。我尝试了以下但删除按钮仍然是:
<xpath expr="//field[@name='order_line']//tree" position="attributes">
<attribute name="delete" domain="[(parent.state,'!=','draft')]"/>
</xpath>
是否可以根据父级的草稿状态动态设置delete = false?
我试过了:
<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
,但是全局切换它并不是我想要的。
答案 0 :(得分:2)
我已经使something similar工作了,也使用了记录规则。
这些行应该具有删除权限,以便删除按钮可以在表单中使用,并且如果满足某些条件,记录规则应该拒绝删除访问。
所以你的第二条记录规则应该有效。 问题是删除按钮仍然可见,但规则会引发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>
答案 1 :(得分: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>
我认为语义是:
答案 2 :(得分:0)
而不是删除你可以使用给定的标准使其不可见
<xpath expr="//field[@name='order_line']//tree" position='attributes'>
<attribute name='invisible' attrs="{'invisible':[('parent.state','!=','draft')]}">1</attribute>
</xpath>
这只是一个简单的想法..试试吧。