Odoo : search multiple fields

Jeevachaithanyan Sivanandan - Jan 21 - - Dev Community

In the realm of Odoo development, tailoring search functionality to meet specific needs is crucial for seamless user interactions. While the operator attribute offers basic filtering capabilities, filter_domain emerges as a powerful tool to construct more versatile and adaptive search experiences. Let's dive into its essence and explore practical code examples to harness its potential effectively.

Understanding filter_domain

Definition: A Python expression that evaluates to a domain, allowing you to create custom search filters based on field values.

Flexibility: Surpasses operator in terms of adaptability, enabling searches across multiple fields, applying intricate conditions, and incorporating context variables.
Structure: Evaluates to a list of tuples, where each tuple represents a search condition in the format (field name, operator, value).

How it Works:

  • User Input: The user enters a search term in a designated field.
  • Expression Evaluation: Odoo executes the Python expression specified within filter_domain.
  • Domain Generation: The expression dynamically constructs a domain based on the user's input.
  • Record Filtering: Odoo applies the generated domain to filter records, displaying only those that satisfy the criteria.

Searching Multiple Fields:
filter_domain="[('name', 'ilike', self), ('email', 'ilike', self)]"

Filtering Based on a Condition:
filter_domain="[('state', '=', 'done')]"

Combining Multiple Domains:
filter_domain="[('name', 'ilike', self)] + [('state', '=', 'done')]"

Leveraging Context Variables:
filter_domain="[('partner_id', '=', self.env.user.partner_id.id)]"

Filtering Related Fields:
filter_domain="[('partner_id.name', 'ilike', self)]"

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .