什么叫Compute Field?直接翻译过来就是计算字段,也就是说它的结果依赖于其他数据的计算结果或判断结果。
我们今天在这里讲解的就是这种类型的字段如何在Odoo实现。病人有年龄之分,我们让系统根据年龄进行分组显示。
首先,我们要建立一个年龄分组的计算字段age_group,分别在patient.py实现计算功能,在patient_menu.xml的Form View和Tree View里面添加这个年龄分组的计算字段用于编辑和显示
patient.py: 要点在compute=‘set_age_group’,注册进来的是函数名
age_group = fields.Selection([
('adult','成年'),
('minor','未成年'),
], default='male', string='Age Group', compute='set_age_group'); # 新增年龄段
def set_age_group(self):
for rec in self:
if rec.patient_age:
if rec.patient_age < 18:
rec.age_group = 'minor'
else:
rec.age_group = 'adult'
接下来的Form,Tree视图就没什么特别的了,直接追加这个字段就行
<!-- Patient Form -->
<record id="patient_form" model="ir.ui.view">
<field name="name">hospital.patient.form</field>
<field name="model">hospital.patient</field>
<field name="arch" type="xml">
<form string="Patients">
<sheet>
<div class="oe_title">
<h1>
<field name="name_seq" readonly="1"/>
</h1>
</div>
<group>
<group>
<field name="patient_name"/>
<field name="patient_disp_name"/>
</group>
<group>
<field name="patient_age"/>
<field name="age_group"/>
<field name="gender"/>
</group>
<group>
<field name="notes"/>
<field name="image"/>
</group>
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread" options="{'post_refresh':'recipients'}"/>
</div>
</form>
</field>
</record>
<!-- Patient Tree -->
<record id="patient_tree" model="ir.ui.view">
<field name="name">hospital.patient.tree</field>
<field name="model">hospital.patient</field>
<field name="arch" type="xml">
<tree string="Patients">
<field name="name_seq"/>
<field name="patient_name"/>
<field name="patient_disp_name"/>
<field name="gender"/>
<field name="patient_age"/>
<field name="age_group"/>
<field name="notes"/>
<field name="image"/>
</tree>
</field>
</record>
升级om_hospital后,我们添加一条病人记录:
保存后,年龄分组(Age Group)自动定位为未成年(我们在代码中定义的是小于18岁)
然后看一下列表页
转载自:https://blog.csdn.net/xmsea/article/details/105912369