Search code examples
odooodoo-8odoo-9odoo-10

Domain for on field based on another


In task templates form i can add group_id. I want to make a domain that will add task templates depending in what group they belong but kinda have no clue now.

class ProjectTaskGroup(models.Model):
    _name = 'project.task.group'
    _inherit = 'project.object'

    name = fields.Char(string="Name", required=True)


class ProjectTaskTemplate(models.Model):
    _name = 'project.task.template'
    _inherit = 'project.object'

    name = fields.Char(string="Name", required=True)
    group_id = fields.Many2one('project.task.group', string="Task Group")
<!-- Project Task Views -->
<record id="view_task_form2" model="ir.ui.view">
    <field name="name">project.task.form</field>
    <field name="model">project.task</field>
    <field name="inherit_id" ref="project.view_task_form2"/>
    <field name="arch" type="xml">
        <xpath expr="//div[@class='oe_title']" position="before">
            <div class="oe_inline oe_edit_only">
                <field name="group_id" class="oe_inline"/>
                <field name="task_template_id" class="oe_inline"/>
            </div>
        </xpath>
    </field>
</record>

Solution

  • First add field in model 'project.task.group'

    template_id = fields.One2many('project.task.template', 'group_id', string='Group task')
    

    Field of 'project.task'

    task_template_id = field.Many2one('project.task.template') 
    group_id=field.Many2one('project.task.group')
    

    In view of 'project.task'

    <field name="task_template_id" class="oe_inline"/>
    <field name="group_id" class="oe_inline" domain="[('template_id', '=', task_template_id)]"/>
    

    first select template so we get group_id belogs to task_template_id