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

Django实现根据用户选择动态更新学生作业成绩字段

解决方案

一、前端动态同步输入框name与选中作业

通过JavaScript监听下拉选择框的变化,实时修改成绩输入框的name属性,使其与选中的作业名称保持一致:

<h1>Fill in student assignment marks below</h1>
<form action="" method="POST">{% csrf_token %}  
    <input type="text" class="field" placeholder="student ID" name="student">
    <label for="name">Choose an Assignment:</label>
    <select name="name" id="name">
        <option value="A1">A1</option>
        <option value="A2">A2</option>
        <option value="A3">A3</option>
        <option value="A4">A4</option>
        <option value="A5">A5</option>
        <option value="A6">A6</option>
    </select>
    <input type="text" class="field" placeholder="percentage" name="A1" id="mark-input">
    <button type="submit" class="btn">save</button>
</form>

<script>
// 获取下拉框和输入框元素
const assignmentSelect = document.getElementById('name');
const markInput = document.getElementById('mark-input');

// 页面加载时初始化输入框name(默认选中A1)
markInput.name = assignmentSelect.value;

// 监听下拉框变化事件
assignmentSelect.addEventListener('change', function() {
    markInput.name = this.value;
});
</script>

二、后端逻辑简化优化

原代码存在大量重复的数据库查询和赋值操作,可通过Python的setattr()方法统一处理,同时减少数据库查询次数:

def upload_A_marks(request):
    if request.method == 'POST':
        student_id = request.POST.get('student')
        assignment_name = request.POST.get('name')
        mark_value = request.POST.get(assignment_name)
        
        if student_id and assignment_name and mark_value:
            try:
                # 仅查询一次数据库
                student_mark = MarksTable.objects.get(student=student_id)
                # 动态设置对应作业的成绩
                setattr(student_mark, assignment_name, mark_value)
                student_mark.save()
            except MarksTable.DoesNotExist:
                # 处理学生不存在的情况,可根据需求添加提示逻辑
                pass
    return render(request, "upload_A_marks.html")

优化说明:

  • 用request.POST.get()替代直接索引,避免键不存在时抛出异常
  • 仅执行一次数据库查询,提升性能
  • 通过setattr()动态设置模型属性,消除重复的if-else分支
  • 增加try-except捕获学生不存在的异常,提升代码健壮性

内容的提问来源于stack exchange,提问作者scholar from next door

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:01:21