Odoo Help


2 Answers

René Schuster

--René Schuster--
| 7 7 10
Weinheim, Germany
--René Schuster--

Challenge Everything!

René Schuster
16.07.14, 07:18

First of all: The way I would do it (with the tradeoff that the field is empty, if no ssn is given).

Instead of the functional field use a relational field:

'alias': fields.related('patient_id', 'ssn', type='char', string='SSN', store=False)


Now to your code:

The passed ids in the function parameter list are the ids of the records that need to have the field values calculated. In your case, ids contains one or more ids of oemedical.appointment. You shouldn't really use those ids to browse your patients!

def _get_ssn_from_name(self, cr, uid, ids, field_name, arg, context=None):
    res = {};
    for obj in self.browse(cr, uid, ids, context=context):
        if obj.patient_id.ssn:
            res[obj.id] = obj.patient_id.ssn;
            res[obj.id] = 'Not Specified';
        # as alternative to the if-clause one could write: res[obj.id] = obj.patient_id.ssn or 'Not Specified';
    return res;

Also, you should think about renaming the function to: _get_ssn(..)

(EDIT: fixed answer)

Hope this helps.

16.07.14, 08:42

Thank you your help. But I'm still getting errors for both suggestions that you have provided.


Here is what I get when trying to use relational field and ommitting the _get_ssn(...) function :

raise KeyError(error_msg)
KeyError: "Field 'oemedical.patient' does not exist in object 'browse_record(oemedical.appointment, 17)'"


And here is what I get by changing the code of the function as you specified :

2014-07-16 12:32:09,993 7597 ERROR demo openerp.netsvc: 15
Traceback (most recent call last):
  File "/home/oussama/PycharmProjects/openerp-7.0/openerp/netsvc.py", line 296, in dispatch_rpc
    result = ExportService.getService(service_name).dispatch(method, params)
  File "/home/oussama/PycharmProjects/openerp-7.0/openerp/service/web_services.py", line 626, in dispatch
    res = fn(db, uid, *params)
  File "/home/oussama/PycharmProjects/openerp-7.0/openerp/osv/osv.py", line 190, in execute_kw
    return self.execute(db, uid, obj, method, *args, **kw or {})
  File "/home/oussama/PycharmProjects/openerp-7.0/openerp/osv/osv.py", line 132, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/home/oussama/PycharmProjects/openerp-7.0/openerp/osv/osv.py", line 199, in execute
    res = self.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/oussama/PycharmProjects/openerp-7.0/openerp/osv/osv.py", line 187, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/oussama/PycharmProjects/openerp-7.0/openerp/osv/orm.py", line 3679, in read
    result = self._read_flat(cr, user, select, fields, context, load)
  File "/home/oussama/PycharmProjects/openerp-7.0/openerp/osv/orm.py", line 3803, in _read_flat
    record[f] = res2[record['id']]
KeyError: 15

EDIT: The two solutions worked well after making the modifications you provided :)
Thank you again !

René Schuster
16.07.14, 09:03

Sorry.. Minor error in the first solution. Edited my answer. Don't know yet what the issue with the other funtion is...

René Schuster
16.07.14, 09:09

For the second solution: The res-keywords are wrong. Edited my answer again.

16.07.14, 09:15

Both of the solutions that you provided worked well :) Thanks !

Ask a Question
Keep Informed
4 follower(s)
About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now