Выбор Odoo зависит от другого выбора - PullRequest
0 голосов
/ 28 января 2020

У меня есть модель как:

class MyDict(models.Model):
_name='my_module.my_dict'

field1=fields.Char()
field2=fields.Char()
field3=fields.Char()

данные выглядят так:

obj_1 | attr_1 | val_1
obj_1 | attr_2 | val_1
obj_1 | attr_2 | val_2
obj_2 | attr_1 | val_1
obj_2 | attr_1 | val_2

Из другой модели я хочу использовать эти данные шаг за шагом

class NewModel(models.Model):
_name='my_module.new_model'

selection1=field.Selection(selection='_get_selection1')
selection2=field.Selection(selection='_get_selection2')
selection3=field.Selection(selection='_get_selection3')

def _get_selection1(self):
    my_list = []
    selection_list = []
    full_list = self.env['my_module.my_dict'].search([])
    for record in full_list:
       if record.field1 not in my_list:
          my_list.append(record.field1)
       for list_item in my_list:
          selection_list.append((str(list_item), str(list_item)))
    return selection_list

второй выбор должен зависеть от первого

@api.onchange('selection1')
def _get_selection2(self):
   my_list = []
   selection_list = []
   full_list = self.env['my_module.my_dict'].search([('field1', '=', self.selection1])
   for record in full_list:
      if record.field2 not in my_list:
         my_list.append(record.field2)
   for list_item in my_list:
      selection_list.append((str(list_item), str(list_item)))
   return selection_list

но я нашел здесь ошибку

File "/opt/odoo13/odoo/odoo/models.py", line 5817, in process
    if res.get('value'):
AttributeError: 'list' object has no attribute 'get'

как я могу получить selection_list зависит от первого выбора

1 Ответ

0 голосов
/ 30 января 2020

Похоже, единственный способ - создать 3 модели для каждого поля и связать их с полями parent_id и child_ids

class MyDict1(models.Model):
_name='my_module.my_dict1'

name=fields.Char()
child_ids=fields.One2many('my_module.my_dict2', 'parent_id')


class MyDict2(models.Model):
_name='my_module.my_dict2'

name=fields.Char()
parent_id=fields.Many2one('my_module.my_dict1')
child_ids=fields.One2many('my_module.my_dict3', 'parent_id')
...