how-to-add-filters-to-existing-search-view-in-odoo.png
Blogger_636894212542259474.png
By: Nimisha Muralidhar

How to Add Filters to the Existing Search View in Odoo

Technical

When you have large data, filters make the system more user friendly. It helps the user to filter data accordingly. By default, in odoo there are filters which help in filtering data. Customizing according to client requirement is very important. So here we are going to discuss how we can add filters to existing search views.


Here, I am going to add a “Task Tag” in the model project.task and will check how can we add a filter with task tag in the existing search view. For that, we can create a model project.task.tag for task tag and it has to be connected to the model project.task by a Many2one field. So add the following code to the .py file (task.py)


from odoo import models, fields
class Task(models.Model):
   _inherit = "project.task"
   task_tag_id = fields.Many2one('project.task.tag', string='Task Tag')

class ProjectTaskTag(models.Model):
   _name = "project.task.tag"
   task_id = fields.Many2one('project.task')
   name = fields.Char(string='Name')


I created a new model project.task.tag and connected it to the model project.task by a Many2one field.Model project.task.tag has a name field to specify the tag for the task and a Many2one field to connect it to project.task. Since we created a new model don’t forget to add security for the model. Add the following code in the file ir.model.access.csv(security->ir.model.access.csv)


id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_project_task_tag_user,project.task.tag,model_project_task_tag,base.group_user,1,1,1,1


Also add these fields in the corresponding view.


<record id="view_project_task_tag" model="ir.ui.view">
   <field name="name">project.task.tag.view</field>
   <field name="model">project.task.tag</field>
   <field name="type">form</field>
   <field name="arch" type="xml">
       <form>
           <sheet>
               <group>
                   <group>
                       <field name="name"/>
                       <field name="task_id" invisible="1"/>
                   </group>
               </group>
           </sheet>
       </form>
   </field>
</record>
<record id="project_task_view_form_inherit" model="ir.ui.view">
       <field name="name">project.task.form.inherit</field>
       <field name="model">project.task</field>
       <field name="inherit_id" ref="project.view_task_form2"/>
       <field name="arch" type="xml">
           <xpath expr="//sheet/group/group" position="inside">
               <field name="task_tag_id"/>
           </xpath>
       </field>
</record>


Here, in the case of the project.task we can xpath the inherited view and give the view for the task_tag_id. For the model task tag, since it is a new model we have to create a new view. Next, we will move on to the filter, first, we have to identify the external id of the view, where we have to add the filter.


how-to-add-filters-to-existing-search-view-in-odoo


We got the external id of the required view as shown in the picture given above. Next is to inherit the corresponding view and add the filter.


<record id="view_task_search_form_inherit" model="ir.ui.view">
       <field name="name">project.task.search.form.inherit</field>
       <field name="model">project.task</field>
       <field name="inherit_id" ref="project.view_task_search_form"/>
       <field name="arch" type="xml">
           <xpath expr="//search/group" position="inside">
               <filter string="Task Tag" name="Task Tag" context="{'group_by':'task_tag_id'}"/>
           </xpath>
       </field>
</record>


Here, I inherited the required view and xpath it to the required position, where I need to add the filter. In this case, I wanted a group by the filter so I passed the corresponding field in the context. We can also pass the domain to the filter. For example:


<filter string="Customers" name="customer" domain="[('customer_rank','>', 0)]"/>


This is a filter for customers, where it passes the domain in it.


Once we add the filter to the inherited views, install the custom module to the required database. It will result as follows:


how-to-add-filters-to-existing-search-view-in-odoo


When we click on “Task Tag” we get a filtered view as follows:


how-to-add-filters-to-existing-search-view-in-odoo


This is how we can add filters to existing search views.



cybrosys youtube

Comments

0


Leave a comment

 
Calicut

Cybrosys Technologies Pvt. Ltd.
Neospace, Kinfra Techno Park
Kakkancherry, Calicut
Kerala, India - 673635

London

Cybrosys Limited
Alpha House,
100 Borough High Street, London,
SE1 1LB, United Kingdom

Kochi

Cybrosys Technologies Pvt. Ltd.
1st Floor, Thapasya Building,
Infopark, Kakkanad,
Kochi, India - 682030.

Bangalore

Cybrosys Techno Solutions
The Estate, 8th Floor,
Dickenson Road,
Bangalore, India - 560042

Send Us A Message
 
 
 
 
Close
cybrosys