Search code examples
odoo-8odoo

Dynamic domain apply while other field's value changed - odoo


class procurement(models.Model)
    _name="procurement"

    procurement_line_ids = fields.One2many(comodel_name='procurement.line', inverse_name='procurement_id', string='Procurement Lines')
    global_procurement = fields.Boolean("Global Procurement",default=True)

class procurement_line(models.Model)
    _name="procurement.line"

    procurement_id = fields.Many2one(comodel_name='procurement', string='Procurement')
    warehouse_id = fields.Many2one(comodel_name='stock.warehouse', string='Warehouse')

class stock_warehouse(models.Model)
    _name="stock.warehouse"

    is_default_warehouse = fields.Boolean(string="Is Default Warehouse?",default=False)

enter image description here

If global_procurement is True then I want to load only default warehouses in procurement lines otherwise I want to load all warehouses. So how could I do this.


Solution

  • We may try with following way.

    1. Pass value in context. For example:

      <field name="warehouse_id" 
             context="{'global_procurement': parent.global_procurement}"/>
      
    2. Check context value name_search() of stock.warehouse object. For example:

      @api.model
      def name_search(self, name, args=None, operator='ilike', limit=100):
          if self._context and self._context.get('global_procurement'):
              default_list = [1,2,3] # set your logic to search list of default warehouse
              return self.browse(default_list).name_get()
          return super(Warehouse, self).name_search(name=name, args=new_args, operator=operator, limit=limit)
      

    I have written answer in air. I didn't try it.