Django-modelformset

modelformset可以让我们批量操作form/modelform。

通过这篇文章,你能了解到:

  • 使用 modelformset_factory() 创建表单

使用函数modelformset_factory()创建表单

views.py 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
from django.forms.models import modelformset_factory
FormSet = modelformset_factory(model=models.StudyRecord, form=StudyRecordForm, extra=0)
# extra=0 表示不会额外增加一条
queryset = models.StudyRecord.objects.filter(course_record_id=course_id)
formset_obj = FormSet(queryset=queryset[page_obj.start:page_obj.end])
# 接下来的用法同modelform
if request.method == 'POST':
formset_obj = FormSet(data=request.POST)
if formset_obj.is_valid():
formset_obj.save()
return HttpResponse('ok')
return HttpResponse('error')
return render(request, 'study_record_list.html',{'formset': formset_obj})

study_record_list.html 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<form action="" method="post">
{% csrf_token %}
{{ formset.management_form }}

<div class="panel-body">
<table class="table">
<thead>
<tr>
<th>序号</th>
<th>课程</th>
<th>学员</th>
<th>考勤</th>
<th>本节成绩</th>
<th>作业文件</th>
</tr>
</thead>
<tbody>
{% for field in formset %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ field.course_record }}</td>
<td>{{ field.student }}</td>
<td>{{ field.attendance }}</td>
<td>{{ field.score }}</td>
<td>{{ field.homework }}</td>
<td class="hidden">{{ field.id }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<button class="btn btn-warning center-block">提交</button>
</div>
</form>

但是在渲染的时候,我们需要加入 formset.management_form 值 以及当我们自定义输出 field 的时候我们需要手动加上主键 field.id

其它用法:

待补充!!!!

-------------The End-------------

本文标题:Django-modelformset

文章作者:Naqin

发布时间:2019年07月24日 - 00:07

最后更新:2019年11月26日 - 16:11

原始链接:https://chennq.top/django/20190724-django_15_modelformset.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Naqin wechat
欢迎看官加我微信!
坚持原创技术分享,您的支持将鼓励我继续创作!
0%