Python 如何从另一个继承自sales.order的类中获取字段值?

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')

我遇到了这种情况,我需要从B类中获取初始价格,因为计算被继承到“sale.order”中,我无法将其放入模型A中。如何执行此操作,因为每次我将计算移动到类模型A中,它都会出错,因为它找不到继承,但如果我在其上放入继承,它将再次出错

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")