2015-05-27 21 views
5

Chcę wczytać identyfikatory podmiotu w moim module związane z identyfikatorem wykładowcy. Używam api onchange w następujący sposób.Używanie funkcji w filtrze domeny

@api.onchange('lecturer_id') 
def _onchange_lecturer(self): 
    if self.lecturer_id: 
     sub_id =[] 
     a = [] 
     lecturer = self.lecturer_id.id 
     query = """select op_subject_id from lecturer_subject_rel where op_lecturer_id='%s'""" % lecturer 
     self.env.cr.execute(query) 
     a = self.env.cr.fetchall() 
     d = 0 
     for i in a: 
      e = i[0] 
      sub_id.append(e) 
      d += 1 
     return [('subject_id', 'in', sub_id)] 
    else: 
     return None 

i domeny w moim polu.

<field name="subject_id" domain=_onchange_lecturer /> 

poprawna lista identyfikatorów przedmiotów. w jaki sposób mogę załadować przedmioty zgodnie z tą listą identyfikatorów ...?

Odpowiedz

1

Jeśli używasz metody onchange do umieszczenia domeny, nie musisz umieszczać żadnej domeny w polu w xml.

można zrobić coś takiego:

@api.onchange('lecturer_id') 
def _onchange_lecturer(self): 
    res = {} 
    if self.lecturer_id: 
     sub_id =[] 
     a = [] 
     lecturer = self.lecturer_id.id 
     query = """select op_subject_id from lecturer_subject_rel where op_lecturer_id='%s'""" % lecturer 
     self.env.cr.execute(query) 
     a = self.env.cr.fetchall() 
     d = 0 
     for i in a: 
      e = i[0] 
      sub_id.append(e) 
      d += 1 
     res['domain] = {'subject_id': [('id', 'in', sub_id)]} 
    else: 
     res['domain] = {'subject_id': []} 
    return res 

Albo można po prostu stworzyć pola funkcyjnego, że obliczenia id Twój potrzebny przedmiot, a następnie użyć bezpośrednio w domenie.

P.S. ale twój kod szukający ID wygląda naprawdę dziwnie, nie wiem, dlaczego robisz to w ten sposób.

Powiązane problemy