Python 如何从另一个继承自sales.order的类中获取字段值?
我遇到了这种情况,我需要从B类中获取初始价格,因为计算被继承到“sale.order”中,我无法将其放入模型A中。如何执行此操作,因为每次我将计算移动到类模型A中,它都会出错,因为它找不到继承,但如果我在其上放入继承,它将再次出错Python 如何从另一个继承自sales.order的类中获取字段值?,python,odoo,single-table-inheritance,Python,Odoo,Single Table Inheritance,我遇到了这种情况,我需要从B类中获取初始价格,因为计算被继承到“sale.order”中,我无法将其放入模型A中。如何执行此操作,因为每次我将计算移动到类模型A中,它都会出错,因为它找不到继承,但如果我在其上放入继承,它将再次出错 class model_A(models.Model): _name='module.model_a' sale_id = fields.Many2one(string='sale', comodel_name='sale.order')
class model_A(models.Model):
_name='module.model_a'
sale_id = fields.Many2one(string='sale', comodel_name='sale.order')
initial_price_value =???
class model_B(models.Model):
_inherit = 'sale.order'
model_id = fields.One2many(string='model_b', comodel_name='module.model_a', inverse_name='sale_id')
initial_price = fields.Monetary(string="Price Initial", store=True, readonly=True, compute='_product_amount',
tracking=4)
amount_untaxed = fields.Monetary(string="Untaxed Amount", store=True, readonly=True, compute='_product_amount',
tracking=5)
amount_tax = fields.Monetary(string="Taxes", store=True, readonly=True, compute='_product_amount')
@api.depends('order_line.price_total')
def _product_amount(self):
for order in self:
amount_untaxed = amount_tax = 0.0
for line in order.order_line:
amount_untaxed += line.price_subtotal
amount_tax += line.price_tax
order.update({
'amount_untaxed': amount_untaxed,
'amount_tax': amount_tax,
'amount_total': amount_untaxed + amount_tax,
'initial_price': amount_untaxed + amount_tax,
})
我试图做到这一点:
initial_price_value = fields.Monetary(related='sale_id.initial_price')
我犯了这个错误
但仍然不起作用。初始价格未获取总价格的值。下图是sale.order.line总价
但在我的树视图中,初始价格仍然是零。它应反映出141k的金额
xml:
架构师页面视图
销售订单
模型
来自odoo导入模型、字段、api、异常
类架构师(models.Model):
_名称='metrotiles.architect'
name=fields.Char('name')
architect\u id=fields.manyOne('res.partner',string=“architect Name”)
architect\u com\u type=fields.Selection(string='Commission type',
选择=[(“百分比”、“百分比”)、(“金额”、“金额”)])
architect\u commission=fields.Float(string='architect commission')
sale\u id=fields.manyOne(string='sale',comodel\u name='sale.order')
currency\u id=fields.manyOne('res.currency',string='currency')
初始价格值=fields.Monetary(related=“sale\u id.total\u price”,string=“初始价格值”,
货币字段=“货币id”)
#约束-建筑师类型、建筑师委员会
@api.Constraints('architect\u com\u type'、'architect\u commission')
定义验证委员会(自行):
对于自我中的字段:
如果field.architect\u com\u type==“百分比”:
如果(field.architect\u commission>100)或(field.architect\u commission,您可以选择相关字段
initial_price_value = fields.Monetary(related="sale_id.initial_price", string="Initial Price value")
谢谢在销售中没有初始价格
。订单
;-)我也会选择字段类型货币
。@CZoellner没有确切地得到你关于代表什么的评论,但他不是试图从B型中获取A型的一些价格值,B型中有sale.order和一些计算。所以在模型A上,他有manyOne字段,也从模型b本身获得价格值。是吗?是的,我的评论的意思是:它是sale\u id.initial\u price
,类型应该是Monetary
,就像sale.order.initial\u price
。哦。!是的,正确。@CZoellner只是把字段放错地方了。我试图这样做,但字段导致断言错误:“字段模型。初始价格未知货币\u字段无”--
from odoo import models, fields, api, exceptions
class Architect(models.Model):
_name = 'metrotiles.architect'
name = fields.Char('name')
architect_id = fields.Many2one('res.partner', string="Architect Name")
architect_com_type = fields.Selection(string='Commission type',
selection=[('percentage', 'Percentage'), ('amount', 'Amount')])
architect_commission = fields.Float(string='Architect Commission')
sale_id = fields.Many2one(string='sale', comodel_name='sale.order')
currency_id = fields.Many2one('res.currency', string='Currency')
initial_price_value = fields.Monetary(related="sale_id.total_price", string="Initial Price value",
currency_field="currency_id")
# constraint - architect_com_type, architect_commission
@api.constrains('architect_com_type', 'architect_commission')
def _validate_commission(self):
for field in self:
if field.architect_com_type == 'percentage':
if (field.architect_commission > 100) or (field.architect_commission <= 0):
raise exceptions.ValidationError(
"Percentage fields must be less than equal to 100 or greater than 0")
class ArchitectPage(models.Model):
_inherit = 'sale.order'
architect_ids = fields.One2many(string="Architect",
comodel_name='metrotiles.architect', inverse_name='sale_id')
total_price = fields.Monetary(string="Price Initial", store=True, readonly=True, compute='_amount_all',
tracking=4)
amount_untaxed = fields.Monetary(string="Untaxed Amount", store=True, readonly=True, compute='_amount_all',
tracking=5)
amount_tax = fields.Monetary(string="Taxes", store=True, readonly=True, compute='_amount_all')
@api.depends('order_line.price_total')
def _amount_all(self):
for order in self:
amount_untaxed = amount_tax = 0.0
for line in order.order_line:
amount_untaxed += line.price_subtotal
amount_tax += line.price_tax
total_price = amount_tax + amount_untaxed
print(total_price)
order.update({
'amount_untaxed': amount_untaxed,
'amount_tax': amount_tax,
'amount_total': amount_untaxed + amount_tax,
'total_price': amount_untaxed + amount_tax,
})
initial_price_value = fields.Monetary(related="sale_id.initial_price", string="Initial Price value")