如何在Odoo表单视图中显示来自其他向导模型的字段?
解决方法
你遇到的问题根源很明确:hospital.appointment模型本身没有reason字段,视图绑定的是这个模型,自然无法直接引用其他模型(向导)的字段。要实现需求,核心是让reason数据和预约记录关联起来,下面是最合理的实现步骤:
步骤1:给hospital.appointment模型添加reason字段
既然取消预约的理由属于预约记录的属性,直接在目标模型中新增字段是最直接的方案:
class HospitalAppointment(models.Model): _name = "hospital.appointment" # 保留原有字段... reason = fields.Text(string="取消理由")
步骤2:修改向导模型,实现数据同步
更新向导模型,添加与预约的关联,并在取消操作时将向导中的reason写入对应预约记录:
class CancelAppointmentWizard(models.Model): _name = "cancel.appointment.wizard" _description = "Cancel Appointment Wizard" # 新增关联字段,绑定要取消的预约 appointment_id = fields.Many2one('hospital.appointment', string="预约记录", required=True) reason = fields.Text(string="取消理由") def action_cancel_appointment(self): # 执行取消逻辑(比如修改预约状态),同时同步取消理由 self.appointment_id.write({ 'state': 'cancelled', # 假设你的模型有状态字段 'reason': self.reason }) # 关闭向导弹窗 return {'type': 'ir.actions.act_window_close'}
步骤3:正常使用视图配置
现在hospital.appointment模型已经有了reason字段,你原来的表单视图代码就可以正常工作了,不需要额外修改:
<record id="view_hospital_appointment_form" model="ir.ui.view"> <field name="name">hospital.appointment.form</field> <field name="model">hospital.appointment</field> <field name="arch" type="xml"> <form> <sheet> <group> <field name="reason"/> </group> </sheet> </form> </field> </record>
补充说明
如果你的业务场景中,取消理由不需要长期保存在预约记录中,只是临时展示,也可以通过计算字段关联向导数据,但这种场景很少见——因为取消操作完成后,向导记录通常会被清理,导致视图无法显示数据。因此优先推荐上面的方案。
内容的提问来源于stack exchange,提问作者Selman
相关产品推荐
相关产品推荐

