[英]how to compute a Many2one field from another module line
I have module A
that has in One2many with this two 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')
in module B
i what to know if module A has recored that has partner_user equate to created_by then reduced the recored A
id在模块B
中,我知道模块 A 是否记录了 partner_user 等于 created_by 然后减少了记录A
id
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')
an not sure how to start solving this problem it can you please help I have been trying to find a way for two days now不知道如何开始解决这个问题它可以请你帮助我已经尝试了两天了
This is my compute这是我的电脑
@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')
module A模块 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')
module B模块 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
record is created when the user sign up creating a new contact for the company and adding the user contact to it当用户注册为公司创建新联系人并将用户联系人添加到其中时,会创建A
记录
B
user will access it on the website if he's is user and in A
line如果 B 用户是用户并且在A
行中,则B
用户将在网站上访问它
so I want when a record in B
is created the n_company
is computed to the the recored A
that has the user in line所以我希望在创建B
中的记录时,将n_company
计算为记录A
,其中有用户排队
You are comparing an id
to the lambda expression (a reference to a function), the search method will return an empty recordset.您正在将id
与 lambda 表达式(对函数的引用)进行比较,搜索方法将返回一个空记录集。
Use self.env.user
instead of using a search to get the same record.使用self.env.user
而不是使用搜索来获取相同的记录。
partner_user
is a res.partner
record and created_by
is a res.users
record, you can't compare them, maybe you mean if the related partner to the created_by
user is equal to partner_user
. partner_user
是res.partner
记录, created_by
是res.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)])
Edit:编辑:
You should assign the result of the search to the n_company
, not the obj
您应该将搜索结果分配给n_company
,而不是obj
You can find many A
records that have that user in a line.您可以在一行中找到许多包含该用户的A
记录。 There should be another condition to filter records to get only one record.应该有另一个条件来过滤记录以仅获取一条记录。
The following example gets the first record using the default order.以下示例使用默认顺序获取第一条记录。
n_record.n_compnay = obj.search([('subscription_manager_lines.hesaby_user ', '=', n_record.created_by.partner_id)], limit=1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.