способ получить местоположение по умолчанию - PullRequest
0 голосов
/ 05 сентября 2018

В sale.order.line у ​​меня есть поле location_id, и я хочу, чтобы оно заполнялось по умолчанию. проблема в том, что я получаю TypeError: 'bool' object has no attribute '__getitem__' с этим кодом, а self всегда приходит пустым. если я добавлю if self.product_id: к моему методу, он просто перестанет работать.

    class SaleOrderLine(models.Model):
            _inherit = "sale.order.line"

    def _get_default_location(self):
                return self.env['stock.location'].search(['location_id', '=', self.product_id.warehouse_id.out_type_id.default_location_src_id.id], limit=1)

    location_id = fields.Many2one('stock.location', 'Location', default=_get_default_location)

1 Ответ

0 голосов
/ 05 сентября 2018

Методы по умолчанию всегда имеют пустые наборы записей. Там вы не получите никаких данных, за исключением случаев, когда вы узнаете, что нужно вставить что-то в контекст до вызова метода по умолчанию.

Но в вашем примере вы можете использовать метод onchange для product_id. Бьюсь об заклад, вам не нужно location_id без продукта на линии. Поэтому переопределите исходный метод onchange для product_id на sale.order.line и всегда устанавливайте желаемое значение location_id по умолчанию. (Я думаю, это называется product_id_change)

def product_id_change(self):
    res = super(SaleOrderLine, self).product_id_change()
    if self.product_id:
        self.location_id = # your search here
    else:
        self.location_id = False
    return res
...