parent
27a6756dac
commit
efd46a5e9d
|
@ -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,
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue