fixedrelated

bzr revid: fp@tinyerp.com-20080919063020-bgvwhya3r7xs85ct
This commit is contained in:
Fabien Pinckaers 2008-09-19 08:30:20 +02:00
parent 27a6756dac
commit efd46a5e9d
2 changed files with 25 additions and 23 deletions

View File

@ -154,7 +154,7 @@ class res_partner(osv.osv):
'customer': fields.boolean('Customer'),
'supplier': fields.boolean('Supplier'),
'city':fields.related('address','city',type='char', string='City'),
'country':fields.related('address','country_id','name',type='char', string='Country'),
'country':fields.related('address','country_id',type='many2one', relation='res.country', string='Country'),
}
_defaults = {
'active': lambda *a: 1,

View File

@ -638,39 +638,41 @@ class function(_column):
class related(function):
def _fnct_search(self, cr, uid, ids, obj=None, name=None, context=None):
print "_fnct_search >>>",ids,obj,name
return self._fnct_search(obj, cr, uid, obj, name, args)
raise 'Not Implemented Yet'
def _fnct_write(self,obj,cr, uid, ids, field_name, args, context=None):
raise 'Not Implemented Yet'
def _fnct_read(self,obj,cr, uid, ids, field_name, args, context=None):
if not ids: return {}
relation=obj._name
res={}
for data in obj.browse(cr,uid,ids):
objlst = obj.browse(cr,uid,ids)
for data in objlst:
t_data=data
relation=obj._name
for i in range(0,len(args)-1):
field_detail=self._field_get(cr,uid,relation,args[i])
for i in range(len(self.arg)):
field_detail=self._field_get(cr,uid,relation,self.arg[i])
relation=field_detail[0]
if field_detail[1]=='one2many':
if t_data[args[i]]:
t_data=t_data[args[i]][0]
else:
t_data=False
break
elif field_detail[1]=='many2one':
if t_data[args[i]]:
t_data=t_data[args[i]]
else:
t_data=False
break
if t_data:
res[data.id]=t_data[args[len(args)-1]]
if not t_data[self.arg[i]]:
t_data = False
break
if field_detail[1] in ('one2many','many2many'):
t_data=t_data[self.arg[i]][0]
else:
t_data=t_data[self.arg[i]]
if type(t_data) == type(objlst[0]):
res[data.id]=t_data.id
else:
res[data.id]=t_data
return res
def __init__(self,*arg,**args):
function.__init__(self,self._fnct_read, arg, fnct_inv_arg=arg,method=True, fnct_search=self._fnct_search,**args)
def __init__(self,*arg,**args):
print arg
self.arg = arg
super(related, self).__init__(self._fnct_read, arg, fnct_inf=self._fnct_write, fnct_inv_arg=arg,method=True, fnct_search=self._fnct_search,**args)
# TODO: call field_get on the object, not in the DB
def _field_get(self, cr, uid, model_name, prop):
cr.execute('SELECT relation,ttype FROM ir_model_fields WHERE name=%s AND model=%s', (prop, model_name))
res = cr.fetchone()