好的,在花了8个小时的搜索和阅读后,我觉得是时候问了。我正在创建一个练习django的学校应用程序,我被困在评分部分。我有一个“Matricula”模型,它关联学生和一个班级,以及一个“Parcial”模型,它定义了活动中的一段时间。此外,还有一个“等级”模型创建了一个要评分的任务,由“Parcial”和“Class”定义,还有一个“Student_Grade”模型,它实际上将“Grade”,“Matricula”和数值(此模型旨在为每个学生分配成绩)。
以下是该方案:
型号:
class Grade(models.Model):
parcial = models.ForeignKey("configuracion_sam.Estructura_Subperiodo")
materia = models.ForeignKey("configuracion_sam.Materia")
type = models.ForeignKey("Grade_Type")
def __unicode__(self):
return self.parcial.name + " " + self.materia.nombre + " " + self.materia.clase.clase_name
class Student_Grade(models.Model):
assignment = models.ForeignKey("Grade")
student = models.ForeignKey("configuracion_sam.Matricula")
grade = models.FloatField()
def __unicode__(self):
return self.assignment.materia.nombre+" "+self.student.estudiante.usuario.name
查看:
def create_grade(request, grade_id):
grade = Grade.objects.get(pk = grade_id)
students = Matricula.objects.filter(clase__id = grade.materia.clase_id).order_by("estudiante__usuario__last_name")
Student_Grade_FormSet = inlineformset_factory(Grade, Student_Grade, extra = len(students))
context = RequestContext(request)
formset = Student_Grade_FormSet(instance = grade, initial = students.values())
if request.method == "POST":
formset = Student_Grade_FormSet(request.POST, instance = grade)
if formset.is_valid():
formset.save()
return redirect("/faltas/disciplina/")
else:
for form in formset:
print form.errors
return render_to_response("academic_office_sam/students_grades",
{"students":students, "formset":formset},
context)
else:
return render_to_response("academic_office_sam/students_grades",
{"students":students, "formset": formset},
context)
请注意我在视图中如何使用内联表单集,以便通过分配特定的“成绩”实例,我可以同时为多个学生创建多个注册表。在这种情况下,我设置额外= len(学生)来创建一些表格,这些表格对应于在“同一级别”相关的同一班级注册的学生人数。
现在的问题是:如何为每个学生设置Student_Grade表单上的“Matricula”字段的初始值,从而导致查询“学生”?我试过了:
initial = students
initial = students.values()
queryset = students
queryset = students.values()
没有成功。也许它不起作用,因为“matricula”模型没有在formset中声明?我读过一些关于初始参数的内容,只适用于“额外”表单,但我无法管理它以显示。
提前感谢您花时间阅读本文,并在可以的情况下提供帮助!
罗德里戈
答案 0 :(得分:0)
Student_Grade_FormSet = inlineformset_factory(Grade, Student_Grade, extra=len(students))
if request.POST:
formset = Student_Grade_FormSet(request.POST)
if formset.is_valid():
formset.instance = grade
formset.save()
else:
formset = Student_Grade_FormSet()
for inline_form, data in zip(formset.forms, students.values('pk')):
inline_form.initial = {'student': data}