Odoo:在one2many中的价值在api.depends中没有变化

时间:2016-05-25 10:40:08

标签: python python-2.7 openerp odoo-8

我有3个模型,这是每个模型的有趣部分:

投票:

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) 那么为什么默认值会选择,即使我要求它们被计算,但它仍然明白它必须创建一个新的元组?

1 个答案:

答案 0 :(得分:1)

你不必制作" 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})]