Odoo — добавить пользовательское поле, связанное с заказом на продажу

#python #odoo

#python #odoo

Вопрос:

как показано ниже, я добавил sub.name поле в модель заказа на продажу, и оно работает хорошо.

 class sales_order_imcc(models.Model):
    _inherit = 'sale.order'
    sub_name = fields.Char(string="Subject Name")
  

теперь мне нужно добавить это поле sub_name в модель комплектации запасов, но я получил внутреннюю ошибку сервера

 class stock_exp(models.Model):
    _inherit = 'stock.picking'
    sub_name = fields.Char(string="SO Reference", related="sale_order_id.sub_name")
  

Комментарии:

1. Какую ошибку оно возвращает?

Ответ №1:

sale_order_id должно быть в stock.picking модели, если нет, вы получите сообщение об ошибке. До Odoo 10 в sale_id было добавлено вычисляемое поле с именем……….. sale_stock .

Пример Odoo 8:

 def _get_sale_id(self, cr, uid, ids, name, args, context=None):
    sale_obj = self.pool.get("sale.order")
    res = {}
    for picking in self.browse(cr, uid, ids, context=context):
        res[picking.id] = False
        if picking.group_id:
            sale_ids = sale_obj.search(cr, uid, [('procurement_group_id', '=', picking.group_id.id)], context=context)
            if sale_ids:
                res[picking.id] = sale_ids[0]
    return res

_columns = {
    'sale_id': fields.function(_get_sale_id, type="many2one", relation="sale.order", string="Sale Order"),
}  
  

sale_id Преобразуется в связанное поле, начиная с версии 10, вы можете видеть это в следующем примере Odoo 13:

 
class StockPicking(models.Model):
    _inherit = 'stock.picking'

    sale_id = fields.Many2one(related="group_id.sale_id", string="Sales Order", store=True, readonly=False)

  

Вы можете использовать ту же логику в зависимости от вашей версии Odoo, чтобы получить значение sub_name from sale.order .