【问题标题】:how to read value from field of another model?如何从另一个模型的字段中读取值?
【发布时间】:2018-12-18 18:01:57
【问题描述】:

我正在使用 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')

【问题讨论】:

  • 欢迎来到 Stack Overflow!什么不完全有效?我建议你阅读“How to ask?”文章。

标签: python odoo odoo-10


【解决方案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

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

【讨论】:

    【解决方案2】:

    感谢您的回答。

    我尝试了一些变体,但仍然无法正常工作。 “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')
    

    【讨论】:

    • 我在代码中找不到任何错误。 sale_order 字段减速有点令人困惑,请像这样然后尝试 ---> sale_order = fields.Many2one('sale.order',string='Sale Order')
    • 不幸的是,它也不起作用。但它必须在这条线上。
    • 嗯,我确信我的代码没有问题。一定有其他更好的问题你应该和我分享你的整个模块。
    • 是的,那太好了。我怎样才能把模块发给你?在这里是不可能的。电子邮件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2021-04-30
    • 1970-01-01
    相关资源
    最近更新 更多