djangoを初めて使用しています。私は、さまざまなクラスや課題の学生の成績を把握するのに役立つ教師用ユーティリティのWebサイトを作っています。現在、私は1つのクラスのページを作成しており、テーブルに情報を表示しています。ここでは、学生は行で、各割り当ては列です。djangoフォームを使用して複数の異なるオブジェクトに値を割り当てる方法
メインのクラスページと同じフォーマットで各課題の学生の成績を変更できる「編集」ページを作りたいと思います。そのため、テーブルの各セルのグレードの代わりに、ページの下部に保存ボタンがある入力フィールドがあります。そして私はそれを達成する方法がわかりません。フォームを作成して、特定の生徒/割り当てペアに値を割り当てる方法はありますか?そして、どのように私は各学生/割り当てのペアのそれらのフォームの複数を持つことができますか?私は(不成功に)formsetsを使用してみましたが、私はあまり進歩を遂げることができませんでした。ここで
は私のモデルは、ここで
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 Imは、クラスのページに用
<!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>
感謝を生成するために使用されていますヘルプ
なぜあなたはジャンゴのフォームでそれをしたいですか? ...私は可愛らしくないと信じていませんが、あなたは伝統的に作ることができます。つまり、手動で入力フィールドを使うことです。 –