如何修改odoo 9中另一个类的选择字段?

时间:2017-01-18 15:28:22

标签: openerp odoo-9

我希望在验证该发票后修改与发票相关的“SaleOrder”类中的“invoice_status”字段。

发票的验证在帐户模块内的“AccountInvoice”类中定义:

std::vector<float>

我意识到“SaleOrder”类中的“name”字段与“AccountInvoice”类中的“origin”字段有关。

所以,我修改了invoice_validate函数,如下所示:

@api.multi
def invoice_validate(self):
  ...

由于某种原因,写入p​​arte不起作用。

这是SaleOrder类中“invoice_status”字段的官方定义:

@api.multi
def invoice_validate(self):
    for invoice in self:
        ...
        origin = self.origin
        sale_order_id = self.env['sale.order'].search([('name', '=', origin)])[0].id
        sale_order_obj = self.env['sale.order'].browse(sale_order_id)
        sale_order_obj.write({'invoice_status': 'invoiced'})
    return self.write({'state': 'open'})

2 个答案:

答案 0 :(得分:1)

您无法设置invoice_status的值,因为它是计算字段。即使你设置了它的值,当它所依赖的字段被改变时它将被重新计算,并最终找到它应该具有的值 - 并写下该值而不是你的值。

Odoo使它成功(当订单开具发票时会开具发票)。所以我认为你不需要做它。如果你非常需要存储你的值,你应该更改该字段,以便不再计算它,或者创建另一个字段。

答案 1 :(得分:0)

检查Selection类的selection_add属性。

如果要在选择字段中添加一些项目,则必须在继承自同一模型的另一个类中重新定义它,并将其声明为:

invoice_status = fields.Selection(selection_add=[("state", "open")])

检查Selection类文档并在代码库中搜索selection_add以查看一些示例。