python 2.7 - yet another struggle with django inline formsets -
ok, after spending 8 hours of search , read, think time ask. creating school app practice django, , stuck @ grading part. have "matricula" model, relates student , class, , "parcial" model defines period of time within activities take place. also, there "grade" model creates task graded, defined "parcial" , "class", , "student_grade" model relate "grade", "matricula" , numeric value (this model intended assign grade every student).
here scenario:
models:
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
view:
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, = 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: 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)
notice how in view trying use inline formsets that, assigning specific "grade" instance, can create several registries several students @ same time. in case, setting = len(students) create number of forms corresponding number of students registered in same class "grade" related.
now question: how set initial value "matricula" field on student_grade form every student resulting in query "students"? have tried:
initial = students initial = students.values() queryset = students queryset = students.values()
without success. maybe doesnt work "matricula" model not declared in formset? read initial parameter working "extra" forms, couldnt manage show up.
thanks in advance taking time read this, , helping if can!
rodrigo
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() inline_form, data in zip(formset.forms, students.values('pk')): inline_form.initial = {'student': data}
Comments
Post a Comment