Busqueda muchos a muchos (tres tablas)

46 views
Skip to first unread message

Jorge Cedermaz

unread,
Aug 26, 2015, 3:27:40 PM8/26/15
to web2py-usuarios
Buenas, mi consulta viene a raiz de que no se me ocurre como armar esta consulta. Tengo en parte este modelo:

############-CIRUGIA-####################################################################################################
db.define_table("cirugia",
    Field("id_sucursal", "reference sucursal", notnull=True, label="Sucursal"),
    Field("id_servicio", "reference servicio_medico", notnull=True, label="Servicio Medico"),
    Field("id_material", "reference material", label="Material"),
    Field("fecha", "datetime", default=None, label="Fecha Cirugia"),
    Field("cirugia_gesem", "string", length=10, default=None))
db.cirugia.id_sucursal.requires = IS_IN_DB(db, 'sucursal.id','%(sucursal)s', zero=T('Elige una Sucursal'))
db.cirugia.id_servicio.requires = IS_IN_DB(db, 'servicio_medico.id','%(denominacion)s', zero=T('Elige un Servicio Medico'))
db.cirugia.id_material.requires = IS_IN_DB(db, 'material.id','%(denominacion)s', zero=T('Elige un Material'))
#########################################################################################################################

############-CIRUGIA ESTADOS-############################################################################################
db.define_table("cirugia_estado",
    Field("id_estado", "reference estados"),
    Field("id_cirugia", "reference cirugia"),
    Field("id_usuario", "reference auth_user"),
    Field("fecha_creacion", "datetime", notnull=True),
    Field("observaciones", "text", default=None, widget=ckeditor.widget))
#########################################################################################################################

############-CIRUGIA ENTIDAD-############################################################################################
db.define_table("cirugia_entidad",
    Field("id_cirugia", "reference cirugia"),
    Field("id_rol", "reference roles"),
    Field("id_entidad", "reference entidad"))
db.cirugia_entidad.id_cirugia.requires = IS_IN_DB(db, 'cirugia.id')
db.cirugia_entidad.id_rol.requires = IS_IN_DB(db, 'roles.id')
db.cirugia_entidad.id_entidad.requires = IS_IN_DB(db, 'entidad.id')
#########################################################################################################################

En un controlador mi idea es gestionar las "cirugías" con un grid de la siguiente manera:

@auth.requires_login()
def cirugias():
    campos = [db.cirugia.id_sucursal, db.cirugia.id_servicio, db.cirugia.id_material, db.cirugia.fecha, db.cirugia_estado.id_estado]
    form = SQLFORM.grid(db.cirugia,left=db.cirugia_estado.on(db.cirugia_estado.id_estado==db.cirugia.id), fields=campos, create=False)
    return dict(form=form)

Hasta acá todo perfecto. Solo me resta "enlazar" con la tabla cirugia_entidad. Y aca, si bien lo hice me quedo una fila por cada registro de esa tabla asociada a la cirugia. En cambio yo lo quiero ver como columnas. Hoy lo veo asi:

SUCURSAL | SERVICIO MEDICO | MATERIAL | FECHA CIRUGIA | ESTADO |

Y mi idea es verlo así:

SUCURSAL | SERVICIO MEDICO | MATERIAL | FECHA CIRUGIA | ESTADO | ID ROL1 | ID ROL2 | ID ROL3 | ID ROL4

Espero haberme explicado.


isi_jca

unread,
Aug 27, 2015, 12:35:46 PM8/27/15
to web2py-usuarios
Jorge:

¿Que ocurre si se agregan 7 roles o mas?, la forma de  visualizar la información que planteas quedaria obsoleta. Otra opción sería crear una especie de master-detail, algo similar a como se visualizan la cabecera de una factura y sus items.

Jorge Cedermaz

unread,
Aug 28, 2015, 7:42:27 AM8/28/15
to web2py-usuarios
Buen día, interesante lo que me planteas. Hoy solo se consulta por 2 tipos de entidades. Que es la que me interesaría mostrar. Ahora, en caso de querer ver la información de la manera que me decís, como debería hacer ese master-detail? Tenes algún ejemplo?

Gracias por tu respuesta

isi_jca

unread,
Aug 28, 2015, 12:31:24 PM8/28/15
to web2py-usuarios
Jorge:

El archivo adjunto contiene un modelo para el manejo de una chequera (la cabecera) y permitir visualizar los cheques que contiene la misma (el detalle). Desde el menú llamo a la vista chequera.

Espero te sea de utilidad.

Saludos.
master_detail_cheques.txt

Jorge Cedermaz

unread,
Aug 28, 2015, 2:43:21 PM8/28/15
to web2py-usuarios
Julio, muchas gracias por tu tiempo!!! Voy a estudiar el codigo y ver como lo adapto a mi caso. Gracias por tu ayuda!!!
Reply all
Reply to author
Forward
0 new messages