Домен в Many2one Odoo 11

#python #python-3.x #odoo #odoo-11 #zohobooks

#python #python-3.x #odoo #odoo-11 #zohobooks

Вопрос:

У меня есть три модели

 class ZohoTags(models.Model):
    _name = 'zoho.tags'

    name = fields.Char(string="Tags")
    tag_id = fields.Char(string="Tag Id")


class TagsLine(models.Model):
    _name = 'zoho.tags.line'

    x_zoho_tags = fields.Many2one('zoho.tags', string='Tags')
    x_tags_option = fields.Many2one('zoho.tag.option', string='Tags Option', domain="[('tag_ids', '=', x_zoho_tags.tag_id)]")
    rules_id = fields.Many2one('hr.salary.rule')


class TagOptions(models.Model):
     _name = 'zoho.tag.option'

     name = fields.Char(string="tag option name")
     option_tag_id = fields.Char(string="tag option id")
     tag_ids = fields.Char(string="tag_id")
  

В zoho.tags модели у меня есть поле с именем tag_id , а в zoho.tag.option у меня есть tag_ids и оба имеют одинаковые значения.

В zoho.tags.line модели у меня есть Many2one поле с именем x_zoho_tags , в котором отображается список тегов типа: division, state, etc. и x_tags_option , в котором отображаются параметры для каждого тега, такие как:

У тега (division) есть параметры (A, B, C), и эти параметры имеют одинаковые tag_ids сохраненные для тега (division)

Я хочу добавить домен в x_tags_option , чтобы фильтровать x_tag_option , чтобы показывать только те параметры, которые имеют одинаковое значение tag_id .

Поэтому, когда я выбираю division из x_zoho_tags , то x_tags_option должен отображаться только A, B and C .

Я пытался добавить эту строку ниже, но это не работает

 domain="[('tag_ids', '=', x_zoho_tags.tag_id)]
  

Ответ №1:

Я должен с этим разобраться. Вот как я это сделал:

В python:

   @api.onchange('x_zoho_tags')
  def onchange_tags(self):
      res = {}
      if self.x_zoho_tags:
         res['domain'] = {'x_tags_option': [('tag_ids', '=', self.x_zoho_tags.tag_id)]}
      return res
  

В XML:

  <field name="x_zoho_tags"/>
 <field name="x_tags_option" onchange="onchange_tags(x_zoho_tags)"/>