Buenas, de nuevo por aqui requiriendo de su ayuda. Tengo el siguiente 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'))
#########################################################################################################################
############-ENTIDADES-###########################################################################################
db.define_table("entidad",
Field("nombre", "string", length=45, notnull=True),
Field("apellido", "string", length=44, notnull=True),
Field("dni", "integer", length=8, default=None),
Field("fecha_Nac", "date", default=None),
Field("sexo", "list:string", length=1, notnull=True, default='Masculino'),
Field("telefono", "string", length=45, default=None),
Field("direccion", "string", length=45, default=None),
format='%(apellido)s %(nombre)s')
db.entidad.sexo.requires = [IS_IN_SET(['Masculino','Femenino'],zero=T('Seleccione uno...'),error_message=('Elige un sexo')),IS_NOT_EMPTY(error_message='debe eligir un sexo')]
db.entidad.sexo.widget = SQLFORM.widgets.multiple.widget
########################################################################################################################
############-ROLES-######################################################################################################
db.define_table("roles",
Field("denominacion", "string", length=45, notnull=True),
format='%(denominacion)s')
#########################################################################################################################
Y la tabla muchos a muchos:
############-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')
#########################################################################################################################
Desde el controlador nueva_cirugia hago lo siguiente:
def nueva_cirugia():
cliente = db((
db.entidad.id==db.rol_entidad.id_entidad) & (
db.roles.id==db.rol_entidad.id_rol) & (db.roles.denominacion=='Cliente')).select(
db.entidad.id, db.entidad.apellido, db.entidad.nombre)
paciente = db((
db.entidad.id==db.rol_entidad.id_entidad) & (
db.roles.id==db.rol_entidad.id_rol) & (db.roles.denominacion=='Paciente')).select(
db.entidad.id, db.entidad.apellido, db.entidad.nombre)
medico = db((
db.entidad.id==db.rol_entidad.id_entidad) & (
db.roles.id==db.rol_entidad.id_rol) & (db.roles.denominacion=='Medico')).select(
db.entidad.id, db.entidad.apellido, db.entidad.nombre)
instrumentador = db((
db.entidad.id==db.rol_entidad.id_entidad) & (
db.roles.id==db.rol_entidad.id_rol) & (db.roles.denominacion=='Instrumentador')).select(
db.entidad.id, db.entidad.apellido, db.entidad.nombre)
###cargo lista despegable cliente
idc=[]
c =[]
for i in cliente:
idc.append(
i.id)
desc = i.apellido + ' ' + i.nombre
c.append(desc)
###cargo lista despegable paciente
idp=[]
p =[]
for i in paciente:
idp.append(
i.id)
desp = i.apellido + ' ' + i.nombre
p.append(desp)
###cargo lista despegable medico
idm=[]
m =[]
for i in medico:
idm.append(
i.id)
desm = i.apellido + ' ' + i.nombre
m.append(desm)
###cargo lista despegable instrumentador
idi=[]
ins =[]
for i in instrumentador:
idi.append(
i.id)
desi = i.apellido + ' ' + i.nombre
ins.append(desi)
###genero el formulario de ingreso
form = SQLFORM.factory(db.cirugia,
Field('Cliente', requires=IS_IN_SET(idc, labels=c,zero=T('Elige un Cliente'), error_message='Elige una opcion')),
Field('Paciente', requires=IS_IN_SET(idp, labels=p,zero=T('Elige un Paciente'), error_message='Elige una opcion')),
Field('Medico', requires=IS_IN_SET(idm, labels=m,zero=T('Elige un Medico'), error_message='Elige una opcion')),
Field('Instrumentador', requires=IS_IN_SET(idi, labels=ins,zero=T('Elige un Medico'))),
)
if form.process().accepted:
idcirugia = db.cirugia.insert(id_sucursal=form.vars.id_sucursal, id_servicio=form.vars.id_servicio, id_material=form.vars.id_material, fecha=form.vars.fecha, cirugia_gesem=form.vars.cirugia_gesem)
if request.vars.Cliente:
idrol=db(db.roles.denominacion=='Cliente').select(
db.roles.id)
id=db.cirugia_entidad.insert(id_cirugia=idcirugia,id_rol=idrol[0].id, id_entidad=form.vars.Cliente)
if request.vars.Paciente:
idrol=db(db.roles.denominacion=='Paciente').select(
db.roles.id)
db.cirugia_entidad.insert(id_cirugia=idcirugia,id_rol=idrol[0].id, id_entidad=form.vars.Paciente)
if request.vars.Medico:
db(db.roles.denominacion=='Medico').select(
db.roles.id)
db.cirugia_entidad.insert(id_cirugia=idcirugia,id_rol=idrol[0].id, id_entidad=form.vars.Medico)
if request.vars.Instrumentador:
db(db.roles.denominacion=='Instrumentador').select(
db.roles.id)
db.cirugia_entidad.insert(id_cirugia=idcirugia,id_rol=idrol[0].id, id_entidad=form.vars.Instrumentador)
nueva=True
redirect(URL('cirugia_estado', args=[nueva, idcirugia]))
return dict(form=form)
Cuando quiero guardar en la table cirugia_entidad, recibo este error:
27.0.0.1.2015-08-24.16-34-31.03743cf3-d269-4a9f-bc7a-4735c65f3630
<class 'pysqlite2.dbapi2.IntegrityError'> FOREIGN KEY constraint failed
Versión
web2py™ |
Version 2.9.11-stable+timestamp.2014.09.15.23.35.11 |
Rastreo
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. | Traceback (most recent call last): File "/home/jorge/Descargas/Desarrollo/Python/web2py/web2py/gluon/restricted.py", line 224, in restricted exec ccode in environment File "/home/jorge/Descargas/Desarrollo/Python/web2py/web2py/applications/SegPlus/controllers/default.py", line 204, in <module> File "/home/jorge/Descargas/Desarrollo/Python/web2py/web2py/gluon/globals.py", line 392, in <lambda> self._caller = lambda f: f() File "/home/jorge/Descargas/Desarrollo/Python/web2py/web2py/gluon/tools.py", line 3439, in f return action(*a, **b) File "/home/jorge/Descargas/Desarrollo/Python/web2py/web2py/applications/SegPlus/controllers/default.py", line 174, in nueva_cirugia id=db.cirugia_entidad.insert(id_cirugia=idcirugia,id_rol=idrol[0].id, id_entidad=form.vars.Cliente) File "/home/jorge/Descargas/Desarrollo/Python/web2py/web2py/gluon/dal.py", line 9317, in insert ret = self._db._adapter.insert(self, self._listify(fields)) File "/home/jorge/Descargas/Desarrollo/Python/web2py/web2py/gluon/dal.py", line 1361, in insert raise e IntegrityError: FOREIGN KEY constraint failed |