You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中使用JavaScript实现Oracle数据库用户信息更新功能

问题根因与修复方案

核心问题点

  • JS回填逻辑错误:遍历表格单元格时重复给所有表单字段赋值,导致字段值被覆盖、id拼写错误、只读属性设置无效
  • 表单无操作标识:两个提交按钮未加区分标识,后端无法判断是新增还是修改请求
  • 视图层逻辑缺失:仅实现了新增逻辑,没有适配修改请求的分支,修改执行函数为空且拼写错误
  • 数据库层逻辑缺失:缺少Oracle侧的更新存储过程/更新语句实现

修复步骤

1. 修正模板表单

给两个提交按钮增加name属性,用于后端区分操作类型:

<input name="operacion" class="botons" type="submit" value="Agregar" onclick="limpiarFormulario()" >
<input name="operacion" class="botons" type="submit" value="Modificar" >

2. 修复JS回填逻辑

替换原有btnModificar的点击事件代码,按单元格索引精准赋值:

$(".btnModificar").click(function(){
  const currentTr = $(this).closest('tr');
  // 按表格列顺序对应赋值到表单,设置run为只读避免修改
  $("#run").val(currentTr.find('td:eq(0)').text()).prop('readonly', true);
  $("#nombre").val(currentTr.find('td:eq(1)').text());
  $("#a_paterno").val(currentTr.find('td:eq(2)').text());
  $("#a_materno").val(currentTr.find('td:eq(3)').text());
  $("#correo").val(currentTr.find('td:eq(4)').text());
  $("#telefono").val(currentTr.find('td:eq(5)').text());
});

3. 修正视图层逻辑

首先修改registro_coach函数,增加操作类型判断分支:

def registro_coach(request):
    p_coach = 'SP_LISTA_COACH'
    data ={
        'coachs' : listar(p_coach)
    }

    if request.POST:
        operacion = request.POST.get('operacion')
        run = request.POST.get('run')
        nombre = request.POST.get('nombre')
        ap_paterno = request.POST.get('a_paterno')
        ap_materno = request.POST.get('a_materno')
        telefono = request.POST.get('telefono')
        correo = request.POST.get('correo')
        
        if operacion == 'Agregar':
            # 原有新增逻辑保留
            contrasena = run[:4]
            contrato = '1'
            salida = agregar_coach(run,nombre,ap_paterno,ap_materno,telefono,correo,contrasena,contrato)
            if salida == 1:
                data['mensaje'] = 'agregado correctamente'
            else:
                data['mensaje'] = 'no se ha podido agregar'
        elif operacion == 'Modificar':
            # 新增修改逻辑分支
            salida = modificar_coach(run,nombre,ap_paterno,ap_materno,telefono,correo)
            if salida == 1:
                data['mensaje'] = 'modificado correctamente'
            else:
                data['mensaje'] = 'no se ha podido modificar'
        # 操作完成后刷新教练列表
        data['coachs'] = listar(p_coach)

    return render(request, 'core/registro_coach.html', data)

然后修正修改函数的拼写,补充Oracle调用逻辑:

def modificar_coach(run, nombre, ap_paterno, ap_materno, telefono, correo):
    # 此处替换为你实际的Oracle更新逻辑,调用更新存储过程或直接执行UPDATE语句
    # 示例:调用存储过程SP_MODIFICAR_COACH,以run为唯一过滤条件更新对应教练的其他字段
    # 执行成功返回1,失败返回0
    pass

4. 补充Oracle侧逻辑

提前编写好更新教练信息的存储过程,逻辑示例:

CREATE OR REPLACE PROCEDURE SP_MODIFICAR_COACH(
    p_run IN VARCHAR2,
    p_nombre IN VARCHAR2,
    p_ap_paterno IN VARCHAR2,
    p_ap_materno IN VARCHAR2,
    p_telefono IN VARCHAR2,
    p_correo IN VARCHAR2,
    p_salida OUT NUMBER
) AS
BEGIN
    UPDATE coach 
    SET nombre = p_nombre,
        ap_paterno = p_ap_paterno,
        ap_materno = p_ap_materno,
        telefono = p_telefono,
        correo = p_correo
    WHERE run = p_run;
    p_salida := 1;
EXCEPTION
    WHEN OTHERS THEN
        p_salida := 0;
END;

内容的提问来源于stack exchange,提问作者JonaBeyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:45:03