如何从另一个模块行计算 Many2one 字段



我有一个模块A,在One2many中有两个Many2one

partner_user = fields.Many2one('res.partner', string='Hesaby Customer')
subscription_manager_id = fields.Many2one('n_hesaby_subscription_manager.subscription_manager', string='Subscription Manager ID')

在模块Bi 中,如果模块 A 已重新编码,该模块partner_user等同于 created_by 然后减少了重新编码的AID

created_by = fields.Many2one('res.users', string='Created By', default=lambda self: self.env.uid, readonly=True)
n_company = fields.Many2one('n_hesaby_subscription_manager.subscription_manager', string='Company')

不确定如何开始解决这个问题,请您帮忙,我已经尝试了两天

这是我的计算

@api.depends('created_by')
def _compute_user_compnay(self):
for n_record in self:
user_compnay = self.env['res.users'].search([('id', '=', lambda self: self.env.user.id])], limit=1)
print('user id i think',user_compnay)

user_compnay = self.env['n_hesaby_subscription_manager.subscription_manager'].search([('subscription_manager_lines', 'in', user_compnay)], limit=1)

n_record.name = result

created_by = fields.Many2one('res.users', string='Created By', default=lambda self: self.env.uid, readonly=True)

n_company = fields.Many2one('n_hesaby_subscription_manager.subscription_manager', string='Company',compute='_compute_user_compnay')

编辑

模块 A


class n_subscription_manager(models.Model):
_name = 'n_hesaby_subscription_manager.subscription_manager'
_description = 'Hesaby subscription manager'
_inherit = ['mail.thread', 'mail.activity.mixin']
_columns = {
'subscription_manager_lines': fields.One2many('n_hesaby_subscription_manager.subscription_manager.lines','subscription_manager_id', string='Subscription Manager Lines'),
#Other Columns
}
subscription_manager_lines = fields.One2many('n_hesaby_subscription_manager.subscription_manager.lines','subscription_manager_id',track_visibility="always", string='Subscription Manager Lines')

class n_subscription_manager_lines(models.Model):
_name = 'n_hesaby_subscription_manager.subscription_manager.lines'
_description = 'Hesaby subscription manager lines'
_columns = {
'subscription_manager_id': fields.Many2one('n_hesaby_subscription_manager.subscription_manager', string='Subscription Manager ID'),

}
print('OUTPUT ok what')
@api.depends('hesaby_user')
def _compute_user_of_contact(self):
print('OUTPUT test')
for n_use in self:
result = None
user = self.env['res.users'].search([('partner_id', '=', n_use.hesaby_user.id)], limit=1)
print('OUTPUT',user)
result = user.id

n_use.odoo_user = result
# n_subscription.subscription_type = n_subscription.partner_id.subscription_type_contact = result

hesaby_user = fields.Many2one('res.partner', string='Hesaby Customer')

odoo_user = fields.Many2one('res.users', string='Odoo User', compute='_compute_user_of_contact')
user_rank = fields.Selection(string='User Rank', selection=[
('primary_user', 'Primary User'),
('user', 'User'),
])
subscription_manager_id = fields.Many2one('n_hesaby_subscription_manager.subscription_manager', string='Subscription Manager ID')

模块 B

class n_hesaby_snap(models.Model):
_name = 'n_hesaby_snap.n_hesaby_snap'
_inherit = ['mail.thread', 'mail.activity.mixin']
_description = 'Hesaby Snap'
@api.depends('created_by')
def _compute_user_compnay(self):
for n_record in self:

print('OK!')
obj = self.env['n_hesaby_subscription_manager.subscription_manager']
obj.search([('subscription_manager_lines.hesaby_user ', '=', n_record.created_by.partner_id)])
n_record.n_company = obj

created_by = fields.Many2one('res.users', string='Created By', default=lambda self: self.env.uid, readonly=True)
n_company = fields.Many2one('n_hesaby_subscription_manager.subscription_manager', string='Company',compute='_compute_user_compnay')

当用户注册为公司创建新联系人并向其添加用户联系人时,将创建A记录

B用户将在网站上访问它,如果他是用户并且A

所以我希望在创建B中的记录时,n_company被计算到具有用户行

的重新A

您正在将id与 lambda 表达式(对函数的引用(进行比较,搜索方法将返回一个空记录集。

使用self.env.user而不是使用搜索来获取相同的记录。

partner_userres.partner记录,created_byres.users记录,您无法比较它们,也许您的意思是如果created_by用户的相关合作伙伴等于partner_user

obj = self.env['sn_hesaby_subscription_manager.subscription_manager']
obj.search([('subscription_manager_lines.partner_user ', '=', n_record.created_by.partner_id.id)])

编辑:

您应该将搜索结果分配给n_company,而不是obj

您可以找到许多A记录,其中该用户在一行中。 应该有另一个条件来筛选记录以仅获取一条记录。

下面的示例使用默认顺序获取第一条记录。

n_record.n_compnay = obj.search([('subscription_manager_lines.hesaby_user ', '=', n_record.created_by.partner_id)], limit=1)

最新更新