【问题标题】:How to create multiple entries in Django?如何在 Django 中创建多个条目?
【发布时间】:2015-06-12 12:19:14
【问题描述】:

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

【问题讨论】:

    标签: python arrays django


    【解决方案1】:

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

    我相信,好好阅读 Django formsmodelforms 对您来说是非常有益的。通过在 Score 模型和任何其他模型上使用 modelform,可以轻松完成上述任务。

    另外this answer 解释了如何在单个发布请求中处理多个 django 表单。

    【讨论】:

    • 如果我使用 ModelForm,它会不会为我提供一个表格来为单个学生制作单个条目?这对用户来说将是一项乏味的工作,因为他必须为每个条目选择班级、学科、学生和分数。我在想有人可以一次输入所有学生的分数,然后在 html 表单中填写分数列,然后点击提交按钮。这将在多行中插入数据,其中类、主题等数据将是恒定的,但基于文本字段名称,学生 ID 会有所不同。这有任何意义吗? :-/
    • 好吧,您可以提供默认值并只更新重要的字段。您不必只遵循基本示例。
    【解决方案2】:

    这是我处理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") 
    

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      相关资源
      最近更新 更多