(Odoo v.12)
Good morning, i wanna ask for the next:
I got a Transient Model, what have to read another model. This Transient Model its explicity writed for work with one model what i call "empresa.modelo1". This Transient Model its called "modelo1.datos".
I create already 2 transients for 2 models:
model1 "empresa.model1"
transient1 "model1.datos"
model2 "empresa.model2"
transient2 "model2.datos"
The Transient Model makes always the same, in the Tree View of "modelo1" i put a button, which if you select diferents rows in tree view and click pop a window (transient model) with a field "campo" where you write the field name that you want to search, and by a "onchange" function refresh the "texto" (text field) with all the values of that field in all the selected rows.
The transient "model1.datos" have:
campos_disponibles=fields.Text (shows all the fields names of "empresa.model1")
campo=fields.Char here you write the name of field what wants search his value in "empresa.modelo1" selected rows
texto=fields.Texto this field fills with all the results.
@api.onchange("campo")
def set_texto(self):
search in "model1" the actives ids, and write the data in self.texto
resul=self.env['empresa.modelo1'].search( active ids )
for rec in resul:
self.texto+=rec[self.campo]+'\n'
The case its that for not repite for all models this transient model, i wish could make a generic transient model wich read the actual "active_model" and use that for define himself, (but i havent acces to "self.env" or "self._context" what i actually use for read the url).
class ExportaDatos(models.TransientModel):
"""Wizard to update a manual goal"""
_name = 'exporta.datos'
_description = 'Exportar Datos'
current_url=http .request.httprequest.url #Traté de sacar así la url
curr1=current_url[current_url.find('active_model=')+len('active_model='):]
activemodel=curr1[:curr1.find('&')]
campos_disponibles=fields.Text('Campos disponibles')
campo=fields.Char('Campo a Buscar')
texto = fields.Text(string="Datos Exportados")
ids_lines=fields.One2many('ids_exporta.lines', 'elem_id', string='Ids seleccionados')
@api.onchange('campo')
def set_texto(self):
current_url = http .request.httprequest.url
curr1 = current_url[current_url.find('active_model=') + len('active_model='):]
activemodel = curr1[:curr1.find('&')]
revisap = self.env[activemodel].browse(self._context.get('active_ids'))
RESEARCH=False
if revisap:
h0=0
for rec in revisap:
if h0==0:
if self.campo in rec.fields_get():
RESEARCH=True
else:
break
h0+=1
if RESEARCH:
texto = ''
for rec in revisap:
if self.campo in rec.fields_get():
if rec[self.campo]:
prev1 = str(rec[self.campo])
texto += prev1 + '\n'
self.texto = texto
@api.model
def default_get(self, fields):
current_url = http .request.httprequest.url
curr1 = current_url[current_url.find('active_model=') + len('active_model='):]
activemodel = curr1[:curr1.find('&')]
resul = super(ExportaDatos, self).default_get(fields)
revisap = self.env[activemodel].browse(self._context.get('active_ids'))
resul['campo']='tel'
res = self.env[activemodel].search([], limit=1)
h0 = 0
for Field in res.fields_get():
if h0 == 0:
resul['campos_disponibles'] = 'Campos para extraer:\n' + Field + ' (%s)' % str(res[Field])
else:
resul['campos_disponibles'] += '\n' + Field + ' (%s)' % str(res[Field])
h0+=1
if revisap:
texto=''
resul['ids_lines']=[]
for rec in revisap:
resul['ids_lines'].append((0,0,{'id_model':rec.id,'elem_id':self.id }))
if 'tel' in revisap.fields_get():
if rec.tel:
texto+=prev1+'\n'
elif 'name' in revisap.fields_get():
texto+=prev1+'\n'
resul['texto']=texto
return resul
class ListaExportarIds(models.TransientModel):
"""Wizard to update a manual goal"""
_name = 'ids_exporta.lines'
_description = 'Ids a utilizar'
current_url = http .request.httprequest.url
curr1 = current_url[current_url.find('active_model=') + len('active_model='):]
activemodel = curr1[:curr1.find('&')]
id_model = fields.Many2one(activemodel, string="ID elem")
elem_id=fields.Many2one('exporta.datos', string='lista_ids')