场景:模型1是通用配置模型,布尔值控制一些操作,模型2的值,必输、展示与否取决于通用配置的True或False,这样的情况,可以考使用compute.
模型1(配置模型):_name = 'kthrp.account.general.setting'
模型2(显示字段模型): _inherit = "kthrp.account.cost.center"
模型1字段:
# 导入唯一名称必输 (关联成本中心字段的必输) import_unique_name_is_required = fields.Boolean(string="Import Unique Name is Required", default=False)
模型2字段:
# 导入唯一名称 import_unique_name = fields.Char(string="Import Unique Name", help="Using excel import function, the system identifies the specific cost center through this value when selecting the cost center")
import_unique_name_is_required
为True,import_unique_name
界面必输
import_unique_name_is_required
为False,import_unique_name
界面非必输
思路:
渲染模型2视图(后面统称视图2)时去获取模型1视图(后面统称视图1)的布尔字段值,再对应视图2设置权限。
实现:
视图1xml
代码中,最开始的位置
<record model="kthrp.account.general.setting" id="view_kthrp_account_general_setting"> </record>
解释
<record model="模型1的模型名(.式)" id="自己设置一个id">
</record>
再下面的动作record中添加res_id:
<record id="action_kthrp_account_general_setting" model="ir.actions.act_window"> <field name="name">General Settings</field> <field name="res_model">kthrp.account.general.setting</field> <field name="view_type">form</field> <field name="view_mode">form</field> <field name="target">fullscreen</field> <field name="res_id" eval="ref('view_kthrp_account_general_setting')"/> </record>
注意eval
的值!
然后再模型2中新建一个与模型1布尔值相同的字段名
# 导入唯一名称 import_unique_name = fields.Char(string="Import Unique Name", help="Using excel import function, the system identifies the specific cost center through this value when selecting the cost center") #前面的代码 ############################################ import_unique_name_is_required = fields.Boolean(default=False, compute = '_compute_import_unique_name') def _compute_import_unique_name(self): config_setting = self.env.ref('kthrp_account.view_kthrp_account_general_setting', raise_if_not_found=False) or False import_unique_name_is_required = config_setting and config_setting.import_unique_name_is_required or False for rec in self: rec.import_unique_name_is_required = import_unique_name_is_required
解释:
# 导入唯一名称 import_unique_name = fields.Char(string="Import Unique Name", help="Using excel import function, the system identifies the specific cost center through this value when selecting the cost center") #前面的代码 ############################################ import_unique_name_is_required = fields.Boolean(default=False, compute = '_compute_import_unique_name') # 自己命名一个方法 def _compute_import_unique_name(self): config_setting = self.env.ref('模型名.新建的record的id', raise_if_not_found=False) or False # 获取对应id的视图模型 import_unique_name_is_required = config_setting and config_setting.import_unique_name_is_required or False # 获取模型1的布尔值 for rec in self: rec.import_unique_name_is_required = import_unique_name_is_required # 赋给模型2新增的布尔值
这样就可以讲模型1的布尔值实时的传递给模型2
视图2的xml
<group> <group> <field name="import_unique_name_is_required" invisible="0"/> ......... <field name="import_unique_name" attrs="{'required':[('import_unique_name_is_required','=',True)]}"/> </group>
使用attrs
方法,设置需要的权限