我是django的新手。我正在建立一個教師實用網站,以幫助跟蹤不同班級和作業的學生成績。目前,我爲一個班級製作了一個頁面,並將信息顯示在一個表格中,學生是行,每個任務是列。如何使用django表單將值分配給多個不同的對象
我想創建一個'編輯'頁面,我可以修改學生的每個作業的成績,格式與主要課程頁面相同。因此,不是表中每個「單元格」中的成績,都會有一個輸入字段,在頁面底部有一個保存按鈕。我不知道如何實現這一點。我怎樣才能讓表格爲特定的學生/作業對分配一個值?我怎樣才能爲每個學生/任務配對使用多種形式?我嘗試使用(不成功)使用formset,但我無法取得很大進展。
這裏是我的模型
class Student(models.Model):
name = models.CharField(max_length=40)
section = models.ForeignKey(Section, blank=False, on_delete=models.PROTECT)
subjects = models.ManyToManyField(Subject)
def __str__(self):
return self.name
class Assignment(models.Model):
section = models.ForeignKey(Section, blank=False, on_delete=models.PROTECT)
subject = models.ForeignKey(Subject, blank=False, on_delete=models.PROTECT)
assign_date = models.DateField('date assigned', primary_key=True)
def __str__(self):
return self.assign_date.strftime('%d/%m/%y')
class Meta:
unique_together = ('section', 'assign_date')
class AssignmentScore(models.Model):
student = models.ForeignKey(Student, blank=False, on_delete=models.PROTECT)
assignment = models.ForeignKey(Assignment, blank=False, on_delete=models.PROTECT)
assignment_score = models.PositiveIntegerField(validators=[MaxValueValidator(5)], blank=False)
class_assignment_score = models.PositiveIntegerField(validators=[MaxValueValidator(5)], blank=False)
def __str__(self):
return str(self.assignment_score)
class Meta:
unique_together = ('student', 'assignment')
這是我的一種形式
class GradeForm(forms.ModelForm):
# def __init__(self, *args, **kwargs):
# super(GradeForm, self).__init__(*args, **kwargs)
# self.fields['assignment_score'].widget.attrs['style'] = "width:50px"
class Meta:
model = AssignmentScore
fields = ('assignment_score', 'class_assignment_score')
widgets = {
'assignment_score': forms.TextInput(attrs={'size':1}),
'class_assignment_score': forms.TextInput(attrs={'size':1})
}
labels = {
'assignment_score': '',
'class_assignment_score': '',
}
這裏的嘗試是HTML即時通訊使用生成類頁
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'gradebook/style.css' %}" />
</head>
<body>
<form action='.' method='POST'>
{% csrf_token %}
{{ form }}
</form>
<table cellpadding="0" cellspacing="0">
<tr>
<td>
{% if assignments %}
{% for assignment in assignments %}
<td colspan="2">{{assignment}}</td>
{% endfor %}
{% endif %}
</td>
</tr>
<tr>
<td> </td>
{% if assignments %}
{% for assignment in assignments %}
<td>д.р.</td>
<td>к.р.</td>
{% endfor %}
{% endif %}
</tr>
{% if students %}
<form actions='.' method='POST'>
{% csrf_token %}
{% for student in students %}
<tr>
<td>{{student.name}}</td>
{% for s in assignment_scores %}
{% if s.student.name == student.name %}
<td> {{ s.assignment_score }} </td>
<td> {{ s.class_assignment_score }} </td>
{%endif%}
{% endfor %}
</tr>
{% endfor %}
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% else %}
<p> No students </p>
{% endif %}
</table>
</body>
</html>
感謝幫助
爲什麼你想讓它與Django的形式? ...我不相信posible,但你可以用tradicionally,我的意思是,手動輸入的字段 –