从模型创建函数中的 Many2one 相关模型获取价值

Get value from a Many2one related model in model create function

我有两个模型,TextMessage 和 Device,它们将许多 TextMessage 关联到一个设备。

from odoo import models, fields, api

class Device(models.Model):
    _name = 'device'
    _description = 'A model for storing all devices'

    name = fields.Char()
    iden = fields.Char()
    model_name = fields.Char()
    manufacturer = fields.Char()
    push_token = fields.Char()
    app_version = fields.Integer()
    icon = fields.Char()
    has_sms = fields.Char()
    text_message_ids = fields.One2many("text_message", "device_id", string="Text Messages")
from odoo import models, fields, api

class TextMessage(models.Model):
    _name = 'text_message'
    _description = 'Text Messages'

    name = fields.Char()
    message_text = fields.Text()
    pb_response = fields.Text()
    target_number = fields.Char()
    device_id = fields.Many2one('device', 'Device', required=True)
    

    @api.model
    @api.depends("device_id")
    def create(self, values):
        print("values['device_id']",values["device_id"])
        print("self.device_id",self.device_id.iden)
        for rec in self.device_id:
            print("Device ID",rec.iden)
            values['pb_response'] = rec.device_id.iden
        
        return super().create(values) 

在 TextMessage 的创建方法中,我想检索 Device 模型的 iden 属性的值。

TextMessage.create中的打印语句打印:

values['device_id'] 1

self.device_id

循环中的打印语句什么都不打印。

您无法在创建记录之前访问 self,因此它将是错误的。

创建方法有两种写法:

先创建记录再获取iden值:

@api.model
def create(self, values):
    res = super().create(values)
    res.pb_response = res.device_id.iden
    return res

或者您可以从以下值中获取 device_id 记录:

@api.model
def create(self, values):
    if 'device_id' in values and values.get('device_id',False):
        device = self.env['device'].browse(values.get('device_id'))
        if device:
            values['pb_response'] = device.iden
    return super().create(values)

如果 pb_response 字段与 iden 字段相同,那么您可以将其创建为 device_id.iden 的相关字段,一旦 device-id 分配,您将自动获得 iden 值如下:

 pb_response = fields.Char(related="device_id.iden")