forms - 在 Django 1.7中,在一页上使用多个不同的窗体( Crispyforms

  显示原文与译文双语对照的内容
0 0

我试图在一个网页上展示我大学管理网站上的许多表格。 想法是,教师可以在同一页上的组评估中输入一个组的所有标记。 视图应显示一个组元素窗体,然后显示单个元素( 组的大小可以改变)的多个窗体。

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 %}

时间: 原作者:

0 0

这个代码看起来应该像你期望的那样。 尽管如这里,对于 StudentForm 窗体列表,使用窗体窗体可以能是一种更清晰的方法。

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来玩它的价值。

...