Django-Form组件-formset_factory

Django-Form组件-formset_factory,第1张

概述Formset 多个表单的集合,可以同时提交多个from表单中的数据,在web页面中,可以在同一个页面,提交多个form表单。 Django针对不同的formset提供了3种方法: formset_factory, modelformset_factory和inlineformset_factory。下面对modelformset_factory进行示例展示 主要的变化是在视图函数中 from d Formset

多个表单的集合,可以同时提交多个from表单中的数据,在web页面中,可以在同一个页面,提交多个form表单。

Django针对不同的formset提供了3种方法: formset_factory,modelformset_factory和inlineformset_factory。下面对modelformset_factory进行示例展示

主要的变化是在视图函数中

from django.forms import modelformset_factorydef 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 >保存</button>        </div>        <table  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  data-ID="3">                    {{ obj.ID }}                    <td >{{ forloop.counter }} </td>                    <td >{# 让姓名编程不可修改项  #}                        <a href=""> {{ obj.instance.student }}</a>                    </td>                    <td>{{ obj.attendance }}</td>                    <td >{{ obj.score }}</td>                    <td >{{ obj.homework_note }}</td>                    <td >{{ obj.course_record }}</td>                    <td >{{ obj.student }}</td>                    {# 这两项隐藏的目的是,form表单提交数据时需要对其进行验证,二是不需要让使用者看见,因为他是默认的,不需要跟进修改             #}                </tr>            {% endfor %}            </tbody>        </table>    </form>
总结

以上是内存溢出为你收集整理的Django-Form组件-formset_factory全部内容,希望文章能够帮你解决Django-Form组件-formset_factory所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1190704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存