2015-04-06 3 views
0

Как получить значения на поле Many2one, используя OnChange?Как извлечь значения в поле Many2one в качестве поля выбора?

студент должен быть зарегистрирован в одной стандартных и одной группы ... Стандартные есть мульти группа поэтому я хочу, чтобы, когда я изменить стандартное поле .. поле группы должно быть обновлены с группами в этой стандартной

когда я пытаюсь сделать так, что это дает мне ошибку

'Expected singleton: fci.standard.groups(3, 4, 5, 6)' 

Я пытаюсь, что, когда я изменить стандартное поле поле группы будет обновляться, чтобы выбрать только группы в этом стандартной

Вот мой Поля

'standard_id': fields.many2one('fci.standard', string='Standard', required=True), 
'group_id': fields.many2one('fci.standard.groups', string='Standard Group'), 

Вот моя функция

def on_change_standard(self, cr, uid, ids, standard_id, context=None): 
     val = {} 
     if not standard_id: 
      return {} 
     student_obj = self.pool.get('fci.standard') 
     student_data = student_obj.browse(cr, uid, standard_id, context=context) 
     val.update({'group_id': student_data.groups_ids.id}) 
     return {'value': val} 

и вот мой XML

<field name="standard_id" on_change="on_change_standard(standard_id)" widget="selection"/> 
<field name="group_id" widget="selection"/> 
+0

Вы можете сделать это с помощью домена. Но вам нужно удалить widget = "selection". Динамический домен нельзя использовать с widget = "selection". Динамические домены просто игнорируются для выбора виджетов. –

ответ

3

Вы можете изменить свой код и добавить домен в 'group_id' поле как этот

<field name="standard_id" widget="selection"/> 
<field name="group_id" widget="selection" domain[('standard_id','=',standard_id)]"/> 

и редактировать функцию изменения как этот

def on_change_standard(self, cr, uid, ids, standard_id, context=None): 
     val = {} 
     if not standard_id: 
      return {} 
     student_obj = self.pool.get('fci.standard') 
     student_data = student_obj.browse(cr, uid, standard_id, context=context) 
     val.update({'group_id': [ g.id for g in student_data.groups_ids ]}) 
     return {'value': val} 

и он будет работать вы

bye

2

Нет необходимости писать о методе изменения для того, вы можете достичь этого применить домен к тому, что поле. Попробуйте следующее,

<field name="standard_id" widget="selection"/> 
<field name="group_id" widget="selection" domain="[('standard_id','=',standard_id)]"/> 
+0

Динамический домен не может использоваться с widget = "selection". Динамические домены просто игнорируются для выбора виджетов. –

+0

Итак, измените одну вещь в методе on_change, 'val.update ({'group_id': [g.id for g in student_data.groups_ids]})' –

+0

Я редактирую его, и он отлично работал: D Спасибо <3 –

Смежные вопросы