Odoo 9, как правильно согласовать два символа? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть 3 поля, и я пытаюсь объединить поля, поэтому char3 = char1 + char2

Написал следующий код:

# -*- coding: utf-8 -*-

from openerp import models, fields, api
from openerp.tools import ustr

class pucrhase_order_pref_supplier(models.Model):
    _inherit = 'purchase.order.line'
#this field will be displayed on the product list in the purchase order
    preferred_supplier_product = fields.Char(related="product_id.preferred_supplier_middle", string="Preferred Supplier", readonly="true")
    preferred_supplier_template = fields.Char(related="product_id.preferred_supplier_middle", string="Preferred Supplier", readonly="true")
    preferred_supplier = fields.Char(compute='_onchange_proc', store="True")

@api.one
@api.depends('preferred_supplier','preferred_supplier_product','preferred_supplier_template')
def _onchange_proc(self):
        string1 = self.preferred_supplier_product
        string2 = self.preferred_supplier_template
        output = ustr(string1)+"-"+ustr(string2)
        self.preferred_supplier = output

Не уверен, почему, но предпочитаемый_поддержатель не рассчитывается (другие поля работаютотлично).Стоит ли использовать вместо него onchange?

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Прежде всего, несколько комментариев к самому коду: предпочитаемое_приложение_продукта и предпочитаемое_пункта относятся к одному и тому же полю, я не думаю, что это должно быть.

Так же, как сказал Шериф, если вы этого не сделаетедаже если вам нужны поля в вашем представлении, нет необходимости создавать их

Я бы использовал Python True / False для атрибутов полей readonly / store вместо строки.

Почемувычисления зависят от самого себя?

Теперь ваш ответ:

@api.multi
@api.depends('preferred_supplier_product', 'preferred_supplier_template')
def _onchange_proc(self):
    for record in self:
        record.preferred_supplier = '%s-%s' % (record.preferred_supplier_product, record.preferred_supplier_template)

Или в зависимости от того, нужны ли вам поля, объявленные для вашего представления, или нет

@api.multi
@api.depends('product_id.preferred_supplier_middle')
def _onchange_proc(self):
    for record in self:
        record.preferred_supplier = '%s-%s' % (
            record.product_id.preferred_supplier_middle, record.product_id.preferred_supplier_middle)
0 голосов
/ 06 октября 2018

Вы можете объединить две строки следующим способом:

@api.onchange('char1', 'char2')
def _onchange_weight_range(self):
    list = []
    if self.char1:
        conc = str(self.char1 or '') + '-' + str(self.char2 or '')
        list.append(conc)
        self.char3 = ', '.join(list)
0 голосов
/ 03 октября 2018

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

 # no need to create related fields if you are not showing them in your form view

 @api.depends('product_id', 'product_id.preferred_supplier_middle',
               'product_id.preferred_supplier_middle')
 def _onchange_proc(self):
      # I prefer using string formatting for this kind of work
      self.preferred_supplier = '%s-%s' % (product_id.preferred_supplier_middle or '', product_id.preferred_supplier_middle or '')
...