Dominios complejos en una vista openerp, Complex domain in views - openerp
Un ejemplo de como aplicar un dominio complejo sobre un campo
def _get_partner_domain(self, cr, uid, ids, field_name, arg, context=None):
#esta funcion devolvera una cadena de tecto de tipo “[1,34,23,45]” con los ids dela tabla res.partner que queremos mostrar.
res = {}
for orden in self.browse(cr, uid, ids, context = context):
partners=[]
#Realizamos las consultas necesarias para obtener los Ids que buscamos y los pasamos a la lista “partners”
#depues debemos pasar la lista a una cadena de texto, existen varias formas.. esta es una de ellas:
string = ''
for i in partners:
string = string + str(i) + ','
res[orden.id] = '['+string+']'
return res
_columns = {
'partner_domain': fields.function(_get_partner_domain, method=True, type='char', string='Domain'),
'partner_id': fields.many2one('res.partner', 'Partner', required = False, domain = "[('id','in',eval(partner_domain) )]"),
La columna partner_domain es simplemente un campo de tipo char que ontiene una cadena con los ids que queremos mostrar.
En la columna partner_id añadimos como valor de dominio el campo partner_domain , Muy importante es usar la expresion eval(), para que convierta la cadena de texto en una lista.