我是django的新手。我正在建立一个教师公用事业网站,它将帮助跟踪学生在不同课程和作业中的成绩。目前我已经为一个类创建了一个页面,我在一个表中显示信息,其中学生是行,每个作业都是列。
我想创建一个“编辑”页面,我可以用与主类页面相同的格式修改每个作业的学生成绩。因此,不是表格的每个“单元格”中的等级,而是在页面底部有一个带有保存按钮的输入字段。而且我不确定如何实现这一目标。如何使表单为特定学生/作业对分配值?我怎样才能为每个学生/作业对提供多个表格?我尝试使用(不成功)使用formset但我无法在这方面取得很大进展。
以下是我的模特
color
这是我对表单的尝试
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')
这是用于生成类页面的html Im
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': '',
}
感谢您的帮助
答案 0 :(得分:0)
这当然是可能的。但您必须在表单清理方法中手动执行此操作。见:https://docs.djangoproject.com/en/1.10/ref/forms/validation/#validating-fields-with-clean。
特定值的POST数据可以是值列表。因此,如果前端POST有一个列表[[<student_id>, <assignment_id>, <assignment_score>, <class_assignment_score>] ... ]
,那么在您的干净方法中,您可以将这些值转换回实际的AssignmentScore模型。
这是否是最好的方法? Django Forms不直接支持它。但我过去肯定做过类似的事情。