odoo14 根据主表字段动态改变子表的创建,编辑,删除属性

需求:

有一张主表和一张子表,同一个form表单中,子表数据的编辑,删除和创建状态得根据主表的某一或几个字段值而动态在【编辑,删除和创建】【不可编辑,不可删除和不可创建】直接切换

效果:

这里有一张表:主表有三个字段:创建控制编辑控制删除控制


当我的创建控制为:不可创建,编辑状态下子表不可以新创建数据

当我的编辑控制为:不可编辑时,编辑状态下子表不可以新创建数据且不可以编辑

当我的删除控制为:不可删除时,删除状态下子表数据不可以删除


说明:

这三个控制也可以相互使用,比如:不可创建和不可删除,可编辑不可删除 等根据业务需求定制
模型表:主表和子表

from odoo import api, fields, models, _


class Patient(models.Model):
    _name = 'patients.data.model'
    _description = '病人信息'
    name = fields.Char(string='姓名')
    sex = fields.Selection([('man', '男'), ('female', '女')], string='性别')
    doctor_id = fields.Many2one('doctors.data.model', string='主治医师')
    attachment_ids = fields.Many2many('ir.attachment', 'proj_budget_application_rel_attachment', string='附件',
                                      ondelete="restrict")
    control_create = fields.Selection([('create', '可创建'),('no_create','不可创建')],default='create', string='创建控制')
    control_edite = fields.Selection([('edite', '可编辑'),('no_edite', '不可编辑') ], default='edite',string='编辑控制')
    control_delete = fields.Selection([('delete','可删除'),('no_delete','不可删除')], default='delete',string='删除控制')
    patients_detail_id = fields.One2many('patients.detail.model','patient_id',string='明细信息')


class PatientDetail(models.Model):
    _name = 'patients.detail.model'
    _description = '病人明细信息'

    patient_id = fields.Many2one('patients.data.model','病人主表')
    drug_doctor =  fields.Many2one('doctors.data.model','开药医生')
    drug_name =  fields.Char('药物名称')
    drug_price =  fields.Char('药物价格')
    payment_status =  fields.Selection([('is','已缴费'),('no','未缴费')],string='缴费状态')

XML
 


利用 options和attrs 属性实现,如果你想更细致的字段就需要在字段中添加options和attrs了

列如:<field name="drug_name" string="药物名称" required="1"/>

附加:

options 属性:

  • 作用: 用于配置字段的一般行为和外观选项。
  • 语法: 在字段定义中,通过将选项以字典的形式传递给options属性。
xmlCopy code
<field name="field_name" options="{'no_create': True, 'no_edit': True}" />

上述示例中,no_createno_edit是字段的选项。这表示禁用了创建和编辑此字段的功能。

attrs 属性:

  • 作用: 用于根据字段值或其他条件动态地设置字段的属性,如只读、可见性等。
  • 语法: 在字段定义中,通过将属性以字典的形式传递给attrs属性。
xmlCopy code
<field name="field_name" attrs="{'readonly': [('state', '=', 'done')]}" />

上述示例中,如果记录的state字段的值为done,则field_name字段将变为只读。

在Odoo 14中,optionsattrs是XML视图中用于定义字段行为和外观的两个属性。以下是它们的用法和区别:

options 属性:

  • 作用: 用于配置字段的一般行为和外观选项。
  • 语法: 在字段定义中,通过将选项以字典的形式传递给options属性。
xmlCopy code
<field name="field_name" options="{'no_create': True, 'no_edit': True}" />

上述示例中,no_createno_edit是字段的选项。这表示禁用了创建和编辑此字段的功能。

attrs 属性:

  • 作用: 用于根据字段值或其他条件动态地设置字段的属性,如只读、可见性等。
  • 语法: 在字段定义中,通过将属性以字典的形式传递给attrs属性。
xmlCopy code
<field name="field_name" attrs="{'readonly': [('state', '=', 'done')]}" />

上述示例中,如果记录的state字段的值为done,则field_name字段将变为只读。

区别:

  1. options 属性:
    • 用于一般的字段行为和外观选项。
    • 不依赖于字段的值或其他条件。
  1. attrs 属性:
    • 用于根据字段值或其他条件动态设置字段的属性,如只读、可见性等。
    • 依赖于字段的值或其他条件。

猜你喜欢

转载自blog.csdn.net/weixin_62077901/article/details/135274930