как вычислить поле Many2one из другой строки модуля - PullRequest
0 голосов
/ 20 июня 2020
• 1000 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')

не знаю, как начать решать эту проблему, не могли бы вы помочь? Я уже два дня пытаюсь найти способ

Это мои вычисления

    @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, которое имеет пользователя в строке

1 Ответ

1 голос
/ 21 июня 2020

Вы сравниваете id с лямбда-выражением (ссылкой на функцию), метод поиска вернет пустой набор записей.

Используйте self.env.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)])

Изменить:

Вы должны присвоить результат поиска n_company, а не obj

Вы можете найти множество A записей, содержащих этого пользователя в строке. Должно быть другое условие для фильтрации записей, чтобы получить только одну запись.

В следующем примере первая запись получается с использованием порядка по умолчанию.

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