有一张主表和一张子表,同一个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了
列如:
options 属性:
xmlCopy code
上述示例中,no_create和no_edit是字段的选项。这表示禁用了创建和编辑此字段的功能。
attrs 属性:
xmlCopy code
上述示例中,如果记录的state字段的值为done,则field_name字段将变为只读。
在Odoo 14中,options和attrs是XML视图中用于定义字段行为和外观的两个属性。以下是它们的用法和区别:
xmlCopy code
上述示例中,no_create和no_edit是字段的选项。这表示禁用了创建和编辑此字段的功能。
xmlCopy code
上述示例中,如果记录的state字段的值为done,则field_name字段将变为只读。
区别: