Django-Form组件-formset_factory
Formset
多个表单的集合,可以同时提交多个from表单中的数据,在web页面中,可以在同一个页面,提交多个form表单。
Django针对不同的formset提供了3种方法: formset_factory, modelformset_factory和inlineformset_factory。下面对modelformset_factory进行示例展示
主要的变化是在视图函数中
from django.forms import modelformset_factory
def study_record(request,courserecord_id):
# modelformset_factory 支持在同一页面显示多个form,一个form就是作为一条记录,可以直接在本也米娜对from中的内容进行修改
formset = modelformset_factory(model=models.StudyRecord,form=StudyRecordForm,extra=0)
formset_obj = formset(queryset=models.StudyRecord.objects.filter(course_record_id=courserecord_id))
if request.method == 'POST':
formset_obj = formset(data=request.POST)
if formset_obj.is_valid():
formset_obj.save()
next = request.GET.get('next')
print(next)
return redirect(next)
return render(request,'teacher/studyrecord_list.html',{'formset_obj':formset_obj})
【注意】
初始化fromset时,使用的参数:model;form;extra=0,等于1时,会有一个额外的空选项
实例化fromset时,使用的参数:queryset
ModelForm中
class BaseForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 自定义操作,循环添加class操作,当遇到MultiSelectFormField或者forms.BooleanField框时,不加class类
for name, field in self.fields.items():
# if name == 'course' # 可以直接判断字段名
if isinstance(field, (MultiSelectFormField, forms.BooleanField)):
# 判断字段类型是MultiSelectFormField, forms.BooleanField还可以根据需求继续添加到元组中,让他们的格式不接受form-control的样式
continue
# 方式一:
field.widget.attrs['class'] = 'form-control'
# 方式二:
# field.widget.attrs.update({'class': 'form-control'})
class StudyRecordForm(BaseForm):
class Meta:
model = models.StudyRecord
fields = '__all__'
html中注意 {{ formset_obj.management_form }}
<form action="" method="post">
{% csrf_token %}
{{ formset_obj.management_form }}
<div>
<button class="btn btn-primary btn-sm">保存</button>
</div>
<table class="table table-hover" id="tableList">
<thead>
<tr>
<th>序号</th>
<th>学生姓名</th>
<th>考勤</th>
<th>成绩</th>
<th>批语</th>
</tr>
</thead>
<tbody id="UserList">
{% for obj in formset_obj %}
<tr class="relative" data-id="3">
{{ obj.id }}
<td class="table-edit">{{ forloop.counter }} </td>
<td class="table-edit">{# 让姓名编程不可修改项 #}
<a href=""> {{ obj.instance.student }}</a>
</td>
<td>{{ obj.attendance }}</td>
<td class="table-edit">{{ obj.score }}</td>
<td class="table-edit">{{ obj.homework_note }}</td>
<td class="hidden">{{ obj.course_record }}</td>
<td class="hidden">{{ obj.student }}</td>
{# 这两项隐藏的目的是,form表单提交数据时需要对其进行验证,二是不需要让使用者看见,因为他是默认的,不需要跟进修改 #}
</tr>
{% endfor %}
</tbody>
</table>
</form>
Django-Form组件-formset_factory的更多相关文章
- django Form组件
django Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建 ...
- 9.24 Django Form组件
2018-9-23 20:10:04 这两天优化了自己图书管理系统 github 连接:https://github.com/TrueNewBee/pythonDemo 顺便整理了博客,写了好多总结, ...
- Django—Form组件
Django From简介 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比 ...
- django form组件 cookies,session
django form组件 渲染标签 就是组件里面的字段在前端展示叫做渲染标签 校验数据 用户输入的数据提交给后端组件叫做校验数据 forms组件中定义的字段都是必须传值的(required=Tr ...
- 6月28日 Django form组件 和 modelform组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- Python Web框架篇:Django Form组件
Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...
- Web框架django[Form]组件
新手上路 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 # 创 ...
- 32.Django form组件
Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 创建Form类时,主要涉及到 [ ...
- 饮冰三年-人工智能-Python-27 Django Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 后台逻辑(导包+建类) from django ...
- 9.Django form组件
Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 创建Form类时,主要涉及到 [ ...
随机推荐
- .net 中跨域问题
1.ashx跨域接口 context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); 2.w ...
- config文件的实现
https://www.cnblogs.com/jiayouwyhit/p/3836510.html //Config.h #pragma once #include <string> # ...
- 题解 [CF525D] Arthur and Walls
题面 解析 首先考虑将一个\('*'\)变成\('.'\)后会形成什么, 显然至少是一个\(2\times 2\)的矩形. 因为\(1\times 1\)和\(1\times 2\)的改了没用啊, 而 ...
- HDU 6046 - hash | 2017 Multi-University Training Contest 2
思路来自题解和一些博客 最麻烦的是样例没啥用- - /* HDU 6046 - hash [ hash,鸽巢 ] | 2017 Multi-University Training Contest 2 ...
- kubeadm 部署kubernetes1.11.1,dashboard1.10.0
---恢复内容开始--- 实验环境准备2台虚拟机: master节点:172.17.1.36 node节点:172.17.1.40 首先安装master节点: master 的虚拟机是全新的机器,在安 ...
- ACM-ICPC 2018 南京赛区网络预赛Sum,线性筛处理积性函数
SUM 题意:f(n)是n可以拆成多少组n=a*b,a和b都是不包含平方因子的方案数目,对于a!=b,n=a*b和n=b*a算两种方案,求∑i=1nf(i) 首先我们可以知道,n=1时f(1)=1, ...
- pyqt5的简单进度条程序
# -*- coding: utf-8 -*- # @Author : FELIX # @Date : 2018/5/17 16:43 from PyQt5.QtCore import QBasicT ...
- php框架对比
一.ThinkPHP框架 优势:简单易用(Model,Controller,View负责各自的工作),它拥有支持XML标签库技术的编译型模版引擎,支持两种模版标签, 动态编译,缓存技术.还支持自定义标 ...
- 2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)
2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic 题意:有一张图,第i个点被占领需要ai个兵,而每个兵传送至该 ...
- python struct的使用例子
import struct i = 1024 # s0为一个字符串,长度为4,即占四个字节,这样方便传输与保存二进制数据. s0 = struct.pack(">I", i) ...