Openerp 如何动态设置树视图删除状态?
我已将订单行设置为可编辑,如果未处于草稿模式,则希望删除删除按钮。我尝试了以下操作,但删除按钮仍然存在:Openerp 如何动态设置树视图删除状态?,openerp,odoo,openerp-8,Openerp,Odoo,Openerp 8,我已将订单行设置为可编辑,如果未处于草稿模式,则希望删除删除按钮。我尝试了以下操作,但删除按钮仍然存在: <xpath expr="//field[@name='order_line']//tree" position="attributes"> <attribute name="delete" domain="[(parent.state,'!=','draft')]"/> </xpath> 是否可以根据父级的草稿状态动态设置delete=fals
<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>
您只能删除具有草稿父项的项目
[('parent.state','=','draft')]
及
您只能删除具有草稿父项的项目
[('parent.state','!=','draft')]
但这似乎并不实际适用。唯一有效的方法似乎是操纵ir\u model\u 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>
您只能删除具有草稿父项的项目
[('parent.state','!=','draft')]
您编写的“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>
您只能删除具有草稿父项的项目
[('state','=','draft')]
我想语义是:
- 域_力场指出必须考虑模型的哪些记录
- perm_*字段表示哪些操作无法执行(因此“False”值表示操作可以执行,反之亦然)
- 您可以使用给定的条件使其不可见,而不是删除
<xpath expr="//field[@name='order_line']//tree" position='attributes'>
<attribute name='invisible' attrs="{'invisible':[('parent.state','!=','draft')]}">1</attribute>
</xpath>
1.
这只是一个简单的想法。。试试看。为什么不让它成为只读的呢?你需要编辑它吗?@StackUP我需要编辑我添加的1个字段,是的。对,所以我花了几个小时试图让它再次工作。我的
ir.rule
似乎根本不起作用。仅在sale中切换组权限ir.model.access
似乎有效。如果你看我的屏幕截图,我不允许在任何状态下对所有订单行规则进行任何创建和删除,但它并不坚持。ir.model.access
中的组权限是否总是覆盖ir.rule
?相反:ir.rule
覆盖(在ir.model.access
之后检查),因此ir.model.access
应该更具权限,然后ir.rule
为某些条件添加限制。这是我链接的模块的一个例子。嗯,我想我尝试了选择加入和选择退出,但我会再试一次。在任何情况下,我都会给你赏金,因为赏金即将过期。他不想隐藏这棵树,只想隐藏删除按钮。
<xpath expr="//field[@name='order_line']//tree" position='attributes'>
<attribute name='invisible' attrs="{'invisible':[('parent.state','!=','draft')]}">1</attribute>
</xpath>