如何修改 odoo 9 中另一个 class 的选择字段?
How can I modify a selection field from another class in odoo 9?
我想在发票验证后修改 "SaleOrder" class 中与发票相关联的 "invoice_status" 字段。
发票的验证在 "AccountInvoice" class 中定义,在帐户模块内:
@api.multi
def invoice_validate(self):
...
我意识到 "SaleOrder" class 的 "name" 字段与 "AccountInvoice" class 的 "origin" 字段有关。
所以,我修改了 invoice_validate 函数,如下所示:
@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'})
由于某种原因,写入部分不起作用。
这是 SaleOrder "invoice_status" 字段的官方定义 class:
invoice_status = fields.Selection([
('upselling', 'Upselling Opportunity'),
('invoiced', 'Fully Invoiced'),
('to invoice', 'To Invoice'),
('no', 'Nothing to Invoice')
], string='Invoice Status', compute='_get_invoiced', store=True, readonly=True, default='no')
检查选择 class 的 selection_add
属性。
如果您想将一些项目添加到选择字段中,您必须在另一个继承自同一模型的 class 中重新定义它,并像这样声明它:
invoice_status = fields.Selection(selection_add=[("state", "open")])
查看选择 class 文档并在您的代码库中搜索 selection_add
以查看一些示例。
您不能设置 invoice_status 的值,因为它是一个计算字段。即使您设置了它的值,当它所依赖的字段发生更改时,它也会重新计算并最终找到它应该具有的值——并写入该值而不是您的值。
Odoo 使其能够正常工作(当订单开具发票时它会显示已开具发票)。所以我认为你不需要手动操作。如果您非常需要存储您的值,您应该更改该字段以便不再计算它,或者创建另一个字段。
我想在发票验证后修改 "SaleOrder" class 中与发票相关联的 "invoice_status" 字段。
发票的验证在 "AccountInvoice" class 中定义,在帐户模块内:
@api.multi
def invoice_validate(self):
...
我意识到 "SaleOrder" class 的 "name" 字段与 "AccountInvoice" class 的 "origin" 字段有关。
所以,我修改了 invoice_validate 函数,如下所示:
@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'})
由于某种原因,写入部分不起作用。
这是 SaleOrder "invoice_status" 字段的官方定义 class:
invoice_status = fields.Selection([
('upselling', 'Upselling Opportunity'),
('invoiced', 'Fully Invoiced'),
('to invoice', 'To Invoice'),
('no', 'Nothing to Invoice')
], string='Invoice Status', compute='_get_invoiced', store=True, readonly=True, default='no')
检查选择 class 的 selection_add
属性。
如果您想将一些项目添加到选择字段中,您必须在另一个继承自同一模型的 class 中重新定义它,并像这样声明它:
invoice_status = fields.Selection(selection_add=[("state", "open")])
查看选择 class 文档并在您的代码库中搜索 selection_add
以查看一些示例。
您不能设置 invoice_status 的值,因为它是一个计算字段。即使您设置了它的值,当它所依赖的字段发生更改时,它也会重新计算并最终找到它应该具有的值——并写入该值而不是您的值。
Odoo 使其能够正常工作(当订单开具发票时它会显示已开具发票)。所以我认为你不需要手动操作。如果您非常需要存储您的值,您应该更改该字段以便不再计算它,或者创建另一个字段。