我正在尝试建立一个评分系统。我有一个名为Score
的班级,其中列出了所有学生的分数。
class Score(Base):
student = models.ForeignKey(Usr, limit_choices_to={'user_type': 'Student'}, related_name='scored')
subject = models.ForeignKey(Subject)
teacher = models.ForeignKey(Usr, limit_choices_to={'user_type': 'Teacher'}, related_name='marked')
exam = models.CharField(max_length=50)
exam_date = models.DateField()
score = models.IntegerField()
out_of = models.IntegerField()
视图当前传递了两个对象student_list
和subject_list
,其中包含特定班级中的学生人数,以及登录教师所学的科目数。这将允许他选择他为该特定学生群体标记的科目。
def Edit(request, pk):
this_klass = Klass.objects.get(id=pk)
student_list = this_klass.kara_pore.all()
subject_list = request.user.teaches.subject.all
return render(request, "grades/edit.html", {'student_list': student_list, 'subject_list': subject_list})
模板显示一个表格,其中最左边的列包含学生列表,然后下一列包含用于提交其分数的文本字段。我已将文本字段命名为相应学生的id
,希望这可以帮助我在保存分数时引用它们。
{% extends "base.html" %}
{% block body %}
<form method="POST" action="process/"> {% csrf_token %}
<select name="sub">
{% for subject in subject_list %}
<option value="{{ subject }}">{{ subject }}</option>
{% endfor %}
</select>
<br/>
{% for student in student_list %}
{{ student }}<input type="text" name="{{ student.student_id}}"/> <br/>
{% endfor %}
<input type="submit" value="Submit"/>
</form>
{% endblock %}
我目前不知道如何处理分数的输入并将其保存在Score
表中以引用特定学生。直到现在我只在Django中保存了一行。更具体地说,我是以错误的方式保存数据吗?我是否必须使用数组来解决这类问题?
答案 0 :(得分:1)
有很多方法可以解决这个问题。例如,您可以在视图中处理您的html表单,您可以在其中手动创建或更新所有ORM实例。
我相信尽管你对Django forms和modelforms进行了很好的阅读是非常有益的。通过在Score模型和任何其他模型上使用模型形式,可以轻松完成上述任务。
同样this answer解释了如何在一个帖子请求中处理多个django表单。
答案 1 :(得分:1)
这是我的代码来处理diagnose_app中的表,相信它会对你有帮助。
#get the distinct time, blade and counts name info
def gettableinfo(request,tablename):
tableinfo={}
datedis=[]
bladedis = []
counts = []
if request.is_ajax():
if request.method=='GET':
for m in get_models(get_app('diagnose_app'), include_auto_created=True):
if m._meta.db_table == request.GET.get('tablename'):
for bd in m.objects.values('STATION_ID').distinct():
bladedis.append(bd['STATION_ID'])
for dt in m.objects.values('Day','Time').distinct():
datedis.append(dt['Day'].isoformat()+' '+dt['Time'].isoformat())
for ct in m._meta.get_all_field_names():
if ct.isupper():
counts.append(ct)
#tableinfo.append(m._meta.get_field('Blade'))
tableinfo['tablename'] = request.GET.get('tablename')
tableinfo['blades'] = bladedis
tableinfo['times'] = datedis
tableinfo['counts'] = counts
#tableinfo=tableinfo.append('abcde')
#table_info_json=json.dumps(tableinfo)
table_info_json=json.dumps(tableinfo)
return HttpResponse(table_info_json,content_type="application/json")