如何在Django中创建多个条目?

时间:2015-06-12 12:19:14

标签: python arrays django

我正在尝试建立一个评分系统。我有一个名为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_listsubject_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中保存了一行。更具体地说,我是以错误的方式保存数据吗?我是否必须使用数组来解决这类问题?

2 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题。例如,您可以在视图中处理您的html表单,您可以在其中手动创建或更新所有ORM实例。

我相信尽管你对Django formsmodelforms进行了很好的阅读是非常有益的。通过在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")