El código completo de método es el siguiente:

gp = fields.Many2One('disc.gp',
        'Grupo')
    distrito = fields.Many2One('disc.distrito',
        'Distrito')

@staticmethod
def table_query():
        pool = Pool()
        context = Transaction().context
        Gp = pool.get('disc.gp')
        gp = Gp.__table__()
        Reporte = pool.get('disc.reporte')
        reporte = Reporte.__table__()
        ReporteLinea = pool.get('disc.reporte.linea')
        reporte_linea = ReporteLinea.__table__()
        
        where = Literal(True)
        if context.get('fecha_inicio'):
            where &= reporte.fecha_inicio >= context['fecha_inicio']
        if context.get('fecha_fin'):
            where &= reporte.fecha_fin <= context['fecha_fin']
        if context.get('distrito'):
            where &= reporte.distrito <= context['distrito']

        subquery = (reporte_linea
            .join(reporte,
                condition=reporte.id == reporte_linea.reporte)
            .select(
                Max(reporte_linea.id * 1005).as_('id'),
                Max(reporte_linea.create_uid).as_('create_uid'),
                Max(reporte_linea.create_date).as_('create_date'),
                Max(reporte_linea.write_uid).as_('write_uid'),
                Max(reporte_linea.write_date).as_('write_date'),
                (reporte_linea.gp).as_('gp'),
                (reporte.distrito).as_('distrito'),
                where = where,
                group_by=(reporte_linea.gp,
                    reporte.distrito), 
                order_by=(reporte.distrito),
                )
            )
        query = (gp
            .join(subquery,'LEFT',
            condition=gp.id == subquery.gp)
            .select(
                Max(gp.id * 1005).as_('id'),
                Max(gp.create_uid).as_('create_uid'),
                Max(gp.create_date).as_('create_date'),
                Max(gp.write_uid).as_('write_uid'),
                Max(gp.write_date).as_('write_date'),
                (gp.id).as_('gp'),
                (subquery.distrito).as_('distrito'),
                where= subquery.gp == None,
                group_by=(gp.id, subquery.distrito,),
                order_by=(subquery.distrito)
                )
            )

        #print "QUERY: " + str(query)
        return query

Y la llamada la realizo de la siguiente forma: 

@classmethod
    def _get_records(cls, ids, model, data):
        Reporte = Pool().get('disc.reporte.lider.cero.table')

        fecha_inicio = data['fecha_inicio']
        fecha_fin = data['fecha_fin']
        distrito = data['distrito']

        with Transaction().set_context(fecha_inicio=fecha_inicio,
            fecha_fin=fecha_fin, distrito=distrito):
            reports = Reporte.search(
                [],
                #[('distrito','=',distrito)],
                order=[('distrito', 'DESC')], 
                ) 
            #print "REPORTS: " + str(reports)
        
        return reports

Por alguna razón devuelve el campo 'distrito' vacío, tampoco puedo llamar 
al campo gp.distrito.zona en el reporte.  

El viernes, 2 de febrero de 2018, 8:06:02 (UTC-6), Josias Pérez escribió:
>
>
>
> El viernes, 2 de febrero de 2018, 2:40:58 (UTC-6), Sergi Almacellas 
> Abellana escribió:
>>
>> El 02/02/18 a les 07:56, Josias Pérez ha escrit: 
>> > El problema es que ahora no puedo indexar dicha tabla en el método 
>> .search() 
>> > 
>> > Reporte = Pool().get('disc.reporte.lider.cero.table') 
>> > 
>> > reports = Reporte.search( [('distrito','=',distrito)] ) 
>> > 
>>
>> Esto lo deberias hacer sin problema. ¿Que error te da? 
>>
>
> Si le mando el dominio de distrito, no me devuelve ningún registro. Hice 
> algunas pruebas y encontré que el campo distrito llega vacío por alguna 
> razón. Los resultados están correctos pero no llega el campo de distrito. 
>
>>
>> > También en los reportes no puedo utilizar, como por ejemplo: 
>> > gp.distrito.zona (en otros reportes funciona bien, pero no después de 
>> la 
>> > doble consulta). 
>> > 
>>
>> Si el tipo del campo es Many2One no deberias tener problemas. 
>>
>>
> El tipo es Many2One pero no puedo utilizar está notación en los reportes. 
> Lo he utilizado en varios más y no he tenido ningún problema. 
>
>>
>> -- 
>> Sergi Almacellas Abellana 
>> www.koolpi.com 
>> Twitter: @pokoli_srk 
>>
>  

Responder a