Хорошо, проведя 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» не объявлена в наборе форм? Я прочитал что-то об исходном параметре, который работает только для «лишних» форм, но я не мог его отобразить.
Заранее благодарим за то, что нашли время, чтобы прочитать это, и за помощь, если сможете!
Родриго
Есть тысячи подобных вопросов о FormSets здесь ... Вы искали? – madzohan
Как я уже сказал, вроде 8 часов! Возможно, специфика этого вопроса связана с необходимостью использовать значения из дополнительной «модели» для заполнения значений в форме. –
Что такое 'Matricula' (вы не показывали его в моделях) или какие ключи в' students.values () 'dict? И какая логика для выбора начального запроса из '' студентов''? – madzohan