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

Django技术问询:如何录入网页列表信息(如填写学员成绩单)

实现可录入的学员成绩单表格(Django方案)

1. 定义模型与表单类

先创建学员模型,再基于模型生成表单(支持批量处理的表单集):

# models.py
from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=100)
    mark = models.IntegerField()
# forms.py
from django import forms
from django.forms import formset_factory
from .models import Student

class StudentMarkForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = ['name', 'mark']
        widgets = {
            'name': forms.TextInput(attrs={'readonly': 'readonly'}),  # 锁定姓名不可修改
            'mark': forms.NumberInput(attrs={'min': 0, 'max': 100})
        }

# 生成批量处理的表单集
StudentMarkFormSet = formset_factory(StudentMarkForm, extra=0)

2. 视图层处理数据交互

在视图中获取现有学员数据,初始化表单集,并处理提交后的保存逻辑:

# views.py
from django.shortcuts import render
from .models import Student
from .forms import StudentMarkFormSet

def edit_marks(request):
    students = Student.objects.all()
    if request.method == 'POST':
        formset = StudentMarkFormSet(request.POST)
        if formset.is_valid():
            for form in formset:
                if form.has_changed():
                    form.save()
            return render(request, 'marks_edit.html', {'formset': formset, 'success': True})
    else:
        # 用已有学员数据初始化表单集
        formset = StudentMarkFormSet(initial=[
            {'name': s.name, 'mark': s.mark, 'id': s.id} for s in students
        ])
    return render(request, 'marks_edit.html', {'formset': formset})

3. 模板层自定义表格结构

放弃form.as_table,手动编写HTML结构匹配你现有的样式类:

<!-- marks_edit.html -->
<form method="post">
    {% csrf_token %}
    {{ formset.management_form }}
    <div class="s-table-container">
        <table class="s-table">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Mark</th>
                </tr>
            </thead>
            <tbody>
                {% for form in formset %}
                <tr>
                    {{ form.id }} <!-- 隐藏字段,用于定位要更新的学员 -->
                    <td>{{ form.name }}</td>
                    <td>{{ form.mark }}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
    </div>
    <button type="submit">保存成绩</button>
    {% if success %}
    <p>成绩已成功更新!</p>
    {% endif %}
</form>

核心说明

  • form.as_table会生成Django默认的表格结构,无法直接适配你现有的s-table-container和s-table样式,手动编写HTML能完全控制页面结构与样式匹配度。
  • 表单集用于批量处理多条学员数据,management_form是表单集必需的控制字段,用来管理表单数量与标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:25:22