2016-05-25 4 views
0

У меня есть 3 модели, вот интересная часть каждого:Odoo: Значение в one2many doen't изменения api.depends

голосов:

class vote(osv.osv) 

_name = 'vote' 

_columns = { 
    name = fields.many2one('res.partner', 
              'Member of enterprise', 
              select=True), 

    type = fields.interger('Type'), 
} 

history_line:

class history_line(osv.osv) 

_name = 'history_line' 

_columns = { 
    fieldsA = fields.integer('First field'), 
    fieldB = fields.integer('Second field'), 
    this_id = fields.many2one('res.partner', 'link to res'), 
} 

res_partner:

class res_partner(osv.osv) 

_inherit = 'res.partner' 

_columns = { 
    vote_partner_ids = fields.one2many('vote', 
              'name', 
              'Voted peoples', 
              select=True), 

    vote_history_ids = fields.one2many('history.line', 
               'this_id', 
               compute='compute_type', 
               string='History of votes'), 
} 

@api.multi 
@api.depends('vote_partner_ids.type') 
def compute_type(self): 
    for record in self: 
     if self.vote_partner_ids.type: 
      record.vote_history_ids = [(0, 0, {'self.vote_history_ids.fieldA': self.vote_partner_ids.type + 4, 
               'self.vote_history_ids.fieldB': self.vote_partner_ids.type - 2})] 

Их также значение по умолчанию для новой history_line (fieldA = 1, когда вы ничего не делаете, fieldB = -1, если вы ничего не делаете для примера)

Я не могу переместить функцию вычисления в другом месте, потому что много Здесь вычисляются вещи.

Проблема: когда я изменяю тип голоса, будет создана новая строка истории, но со значениями по умолчанию. Я не могу заставить ценности быть чем-то еще. (даже если я ставлю прямо значение, например 10) Так почему же выбираются значения по умолчанию, даже если я попросил их вычислить, но он все еще понимает, что он должен создать новый кортеж?

ответ

0

Вам не нужно делать «PATH» в поля, которые вы хотите изменить, удалить self.vote_history_ids. в зависимости от изменения полей:

@api.multi 
@api.depends('vote_partner_ids.type') 
def compute_type(self): 
    for record in self: 
     if self.vote_partner_ids.type: 
      record.vote_history_ids = [(0, 0, {'fieldA': self.vote_partner_ids.type + 4, 
               'fieldB': self.vote_partner_ids.type - 2})] 
+1

Здесь внутренняя петля self не должна использоваться вместо записи. –

Смежные вопросы