odoo10 关于针对模型1的布尔值设置模型2视图的必输(展示)与否

场景:模型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方法,设置需要的权限

 

 

猜你喜欢

转载自www.cnblogs.com/pywjh/p/12238104.html