2014-12-13 2 views
3

내 대학 관리 웹 사이트의 한 페이지에 여러 양식을 표시하려고합니다. 교사는 동일한 페이지의 그룹 평가에서 한 그룹에 대한 모든 점수를 입력 할 수 있어야한다는 아이디어입니다. 보기에는 그룹 요소 양식이 표시되어야하며 개별 요소에 대한 양식이 여러 개 있어야합니다 (그룹 크기가 다를 수 있음).한 페이지에 여러 다른 양식 사용 (Django 1.7의 Crispyforms)

Django 문서는 양식 접두사에 대한 아이디어가 조금 부족하므로 올바른 방법인지는 잘 모르겠습니다. 양식을 파삭 파삭 한 형태로 렌더링하고 싶습니다. 이 방법이 효과가 있습니까, 아니면 제가 생각하고있는 목표를 달성하기위한 더 좋은 방법이 있습니까?

views.py 
-------- 
# Generate the forms for the template 
group_form = GroupForm(prefix='group') 
student_forms = [] 
for student in students_in_group: 
    student_form = StudentForm(initial={...}, prefix=student.student_id) 
    student_forms.append(student_form) 
... 
# Processing post request 
if request.method == 'POST': 
    group_form = GroupForm(request.POST, prefix='group') 
    if group_form.is_valid(): 
     group_form.save() 
    for student in students_in_group: 
     student_form = StudentForm(request.POST, prefix=student.student_id) 
     if student_form.is_valid(): 
      student_form.save() 


group_feedback.html 
------------------- 
{% crispy group_form %} 
{% for form in student_forms %} 
{% crispy form %} 
{% endfor %} 

답변

1

코드가 예상대로 작동해야합니다. 그러나 StudentForm 양식 목록에 formset을 사용하는 것이 더 명확한 방법 일 수 있습니다.

views.py

StudentFormSet = modelformset_factory(Student) 

# Processing post request 
if request.method == 'POST': 
    group_form = GroupForm(request.POST, prefix='group') 
    if group_form.is_valid(): 
     group_form.save() 
    formset = StudentFormSet(request.POST, prefix='student') 
    if formset.is_valid(): 
     formset.save() 
else: 
    # Generate the forms for the template 
    group_form = GroupForm(prefix='group') 
    formset = StudentFormSet(queryset=Student.objects.filter(whatever gives you students_in_group), prefix='student') 

내가 formsets이 가치가 무엇인지에 대한 crispyforms 함께 플레이 얼마나 심사하지 않았습니다.

관련 문제