如何从另一个模型的字段读取值?

时间:2018-12-18 18:01:57

标签: python odoo odoo-10

我正在使用odoo 10,并创建了一些字段,并遇到以下问题:

我在模块sale.order中创建了自己的字段(x_order_bestelldatum)。确认报价后,在此字段中输入有效订单日期。 现在,当我创建发票时,我想读取模块account.invoice中模块sale.order的x_order_bestelldatum字段,以便可以在发票上打印订单日期。

如何从模型account.invoice中的模型sale.order中读取字段x_order_bestelldatum?

这是我在文件models.py中的代码,但是它不起作用:

from odoo import models, fields, api

class felder_saleorder(models.Model):

    _inherit = 'sale.order'
    x_order_bestelldatum = fields.Date(string="Bestelldatum")


class felder_invoice(models.Model):

    _inherit = 'account.invoice'
    sale_order = fields.Many2one('sale.order','sale_order')
    x_bestelldatum = fields.Date(string="Bestelldatum",related='sale_order.x_order_bestelldatum')
    x_lieferdatum = fields.Date(string="Lieferdatum")

那不起作用(字段x_bestelldatum保持为空):

sale_order = fields.Many2one('sale.order','sale_order')
x_bestelldatum = fields.Date(string="Bestelldatum",related='sale_order.x_order_bestelldatum')

2 个答案:

答案 0 :(得分:1)

好吧,不要以自己的方式去做,再加上我做不到你怎么做。 因此,我建议其他可能对您有所帮助的可能性。

首先让我们谈谈您命名为“ sale_order”的销售订单字段。 您可以使用两个选项在sale_order字段中输入数据。 1)。通过python自动 2)。从列表中手动选择。

如果手动输入数据,则应使用 onchange功能

@api.onchange('sale_order')
def get_order_date(self):
    if self.sale_order:
        self.x_bestelldatum = self.sale_order.x_order_bestelldatum

如果您是通过python自动输入数据,则可以使用货币或创建函数来填充字段。

创建功能:

@api.model
def create(self, vals):
    new_record = super(felder_invoice, self).create(vals)
    if new_record.sale_order:
        new_record.x_bestelldatum = new_record.sale_order.x_order_bestelldatum

    return new_record

计算功能:

首先,您需要像这样修改py文件中的字段减速

x_bestelldatum = fields.Date(string="Bestelldatum",compute="get_order_date")

然后您需要为此创建一个计算函数

@api.one
@api.depends('sale_order')
def get_order_date(self):
if self.sale_order:
    self.x_bestelldatum = self.sale_order.x_order_bestelldatum

您可以使用上述功能获取订单日期,并能够在报告/打印中获取其价值。 希望能帮助到你。 干杯!

答案 1 :(得分:0)

谢谢您的回答。

我尝试了几种变体,但仍然无法正常工作。模块“ account.invoice”中的“ x_bestelldatum”字段始终为空。

这是我的代码的样子:

class felder_invoice(models.Model):

    _inherit = 'account.invoice'
    x_lieferdatum = fields.Date(string="Lieferdatum")


    sale_order = fields.Many2one('sale.order','sale_order')
    x_bestelldatum = fields.Date(string="Bestelldatum",compute="get_order_date")

    @api.one
    @api.depends('sale_order')
    def get_order_date(self):
    if self.sale_order:
        self.x_bestelldatum = self.sale_order.x_order_bestelldatum

是吗?从'sale.order'的所有字段都转移到新的区域设置字段'sale_order'吗?

sale_order = fields.Many2one('sale.order','sale_order')