Odoo 10 - 基于条件的字段默认值

标签 odoo odoo-10

我正在扩展 stock.picking 以修改用作 location_dest_id 的默认值。

标准定义是:

location_dest_id = fields.Many2one(¬
    'stock.location', "Destination Location Zone",¬
    default=lambda self: self.env['stock.picking.type'].browse(self._context.get('default_picking_type_id')).default_location_dest_id,¬
    readonly=True, required=True,¬
    states={'draft': [('readonly', False)]})¬

它基本上使用picking_type中定义的默认位置。

我已经扩展了模型,因此 picking_type 中有一个名为 force_destination 的新字段。我想根据该条件在 stock.picking 上设置目的地。

伪代码:

location_dest_id = fields.Many2one(¬
....
    default=
        if self.env['stock.picking.type'].browse(self._context.get('default_picking_type_id')).force_destination:
            default=1
        else:
            default=lambda self: self.env['stock.picking.type'].browse(self._context.get('default_picking_type_id')).default_location_dest_id

....

最佳答案

您只需要定义一个默认函数:

location_dest_id = fields.Many2one(default="_default_location_dest_id")

@api.model
def _default_location_dest_id(self):
    picking_type_id = self._context.get('default_picking_type_id')
    if not picking_type_id:
        return self.env['stock.location']
    picking_type = self.env['stock.picking.type'].browse(picking_type_id)
    if picking_type.force_destination:
        # return 1  # use an Odoo default external id here
        return self.env.ref('stock.stock_location_stock')
    else:
        return picking_type.default_location_dest_id

希望这对您有帮助。

关于Odoo 10 - 基于条件的字段默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48604822/

相关文章:

postgresql - docker nginx letsencrypt odoo错误

xpath - Odoo xpath 表达式规则

python-2.7 - 如何更改 SaleOrder 的名称格式?奥杜10

odoo - 预期单例 odoo 9

odoo - Many2many 字段依赖于另一个 Many2many 字段

python - Odoo 10 - XMLRPC - 使用外部 XML 标识符

css - 在 Odoo10 中选中复选框时,复选框轮廓消失

javascript - 如何在 Javascript Odoo 10 中扩展 mail.Chatter Widget

odoo - 如何根据用户身份使用 ODOO 隐藏字段?

odoo - openerp 再次发送传入消息