从模型创建函数中的 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")
我有两个模型,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")