как прочитать значение из поля другой модели? - PullRequest
0 голосов
/ 18 декабря 2018

Я работаю с odoo 10 и создал несколько полей, и у меня возникла следующая проблема:

Я создал свое собственное поле (x_order_bestelldatum) в модуле sale.order.Когда я подтверждаю предложение, я ввожу в этом поле дату вступления в силу.Теперь, когда я создаю счет-фактуру, я хочу прочитать поле x_order_bestelldatum модуля sale.order в модуле account.invoice, чтобы я мог напечатать дату заказа на счете-фактуре.

Как я могу прочитатьполе x_order_bestelldatum из модели sale.order в модели account.invoice?

Вот мой код в файле 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 голосов
/ 22 декабря 2018

Спасибо за ваш ответ.

Я перепробовал несколько вариантов, но он все равно не работает.Поле 'x_bestelldatum' в модуле account.invoice всегда будет пустым.

Вот как выглядит мой код:

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')
0 голосов
/ 21 декабря 2018

Ну, давайте не будем делать это по-своему, плюс я не могу понять, как вы это делаете.Итак, я предлагаю некоторые другие возможности, которые могут вам помочь.

Сначала поговорим о поле заказа на продажу, которое вы назвали 'sale_order'.Существует два возможных варианта ввода данных в поле sale_order.1).Автоматически через питона 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

Вы можете получить дату заказа с помощью вышеупомянутых функций и сможете получить ее значение в отчетах / распечатках.Надеюсь, поможет.Ура!

...