This question has been flagged
1 Reply
5508 Views
i want remove repetition from my select box .my code is
    def _sel_func(self, cr, uid,context=None):
        cr.execute("select distinct on(caller) id,caller  FROM calldata1 order by caller")
        result  =  cr.fetchall()
         lst = []
     for r in result:
         dct = {}
         dct['id'] = r[o]
         dct['name']  = r[1]
         lst.append(dct)
    res_ids = [(r['id'], r['name']) for r in lst]
    return res_ids

 _columns = {
        'date_start': fields.date('Date Start', required=True),
        'date_end': fields.date('Date End', required=True),
        'caller_id':fields.many2one(
        'calldata1',
        'Caller',
         selection=_sel_func,
   )
}
but it shows all the data in select box and shows error " ValidateError

The value "7172" for the field "calldata_print_report_wiz.caller_id" is not in the selection "
when selecting this and clicking print. How to show only the data from query in select box .Any one please help?
Avatar
Discard
Best Answer

Hi,

Please try the "_sel_function" like this to return list containing distinct values:

def _sel_func(self, cr, uid,context=None):
cr.execute("select distinct on(caller) id,caller FROM calldata1 order by caller")
result = cr.fetchall()
lst = []
new_lst = []
for r in result:
dct = {}
dct['id'] = r[o]
dct['name'] = r[1]
lst.append(dct)
new_lst = {v['id']:v for v in lst}.values()
res_ids = [(r['id'], r['name']) for r in new_lst]
return res_ids

But you can use a functional field with type "many2one", right? Please tell me the details of what you exactly need to do?

Avatar
Discard