0

Хорошо, проведя 8 часов поиска и чтения, я думаю, что его время спросить. Я создаю школьное приложение для практики джанго, и я застрял в части оценки. У меня есть модель «Matricula», которая касается ученика и класса, а также модель «Parcial», которая определяет период времени в рамках деятельности. Кроме того, существует модель «Ранг», которая создает задачу, подлежащую классификации, определяемую «Parcial» и «Class», и модель «Student_Grade», которая фактически будет относить «класс», «Matricula» и числовое значение (эта модель предназначена для присвоения степени для каждого учащегося).еще одна борьба с django inline formsets

Вот сценарий:

Модели:

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) 

Обратите внимание, как с точки зрения я пытаюсь использовать встроенные FormSets так, что, назначая конкретный Экземпляр «Grade», я могу создать несколько реестров для нескольких студентов одновременно. В этом случае я устанавливаю extra = len (students), чтобы создать несколько форм, соответствующих количеству студентов, зарегистрированных в том же классе, что и «Оценка».

Теперь вопрос: как я мог установить начальное значение в поле «Matricula» в форме Student_Grade для каждого ученика, что привело к запросу «студенты»? Я пробовал:

initial = students 
initial = students.values() 
queryset = students 
queryset = students.values() 

без успеха. Может быть, он не работает, поскольку модель «Matricula» не объявлена ​​в наборе форм? Я прочитал что-то об исходном параметре, который работает только для «лишних» форм, но я не мог его отобразить.

Заранее благодарим за то, что нашли время, чтобы прочитать это, и за помощь, если сможете!

Родриго

+0

Есть тысячи подобных вопросов о FormSets здесь ... Вы искали? – madzohan

+0

Как я уже сказал, вроде 8 часов! Возможно, специфика этого вопроса связана с необходимостью использовать значения из дополнительной «модели» для заполнения значений в форме. –

+0

Что такое 'Matricula' (вы не показывали его в моделях) или какие ключи в' students.values ​​() 'dict? И какая логика для выбора начального запроса из '' студентов''? – madzohan

ответ

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} 
Смежные вопросы