Django Form工厂 和 批量创建数据
Django Form工厂 和 批量创建数据
modelformset_factory
-
应用于大量数据需要修改,在页面生成修改数据页面,并直接修改保存
-
后端代码
# 1. 生成 ModelFormSet 工厂类 # - extra:设定是否留有空白添加项 # - 绑定模型 和 Form模型 ModelFormSet = modelformset_factory(StudyRecord, StudyRecordForm, extra=0) # 2. 生成 ModelFormSet 工厂对象 # - queryset 将 ORM数据 form_set_obj = ModelFormSet(queryset=study_record_query_set.order_by('id')[pm_obj.start:pm_obj.end]) # 3. 通过 form_set_obj 对象进行校验和批量保存 # - data 请求数据 form_set_obj = ModelFormSet(queryset=study_record_query_set.order_by('id')[pm_obj.start:pm_obj.end], data=request.POST) # 数据校验和保存 if form_set_obj.is_valid(): form_set_obj.save()
-
前端代码
// 后端代码 return render(request, 'study_record/study_record_list.html', { "form_set_obj": form_set_obj, "page_html": pm_obj.page_to_html() }) // 1. 加载 formset 工厂对象 {{ form_set_obj.management_form }} // 2. 循环 formset {% for form in form_set_obj %} <tr> {{ form.id }} // 必须要写 <td><input type="checkbox"></td> <td>{{ forloop.counter }}</td> <td>{{ form.instance.student }}</td> <td>{{ form.attendance }}</td> <td>{{ form.score }}</td> <td>{{ form.homework_note }}</td> <td class="hidden">{{ form.course_record }}</td> <td class="hidden">{{ form.student }}</td> </tr> {% endfor %}
批量创建数据 bulk_create
-
bulk_create , 以对象的形式创建多条数据
-
代码:
def multi_init(self): """ 批量创建学习记录 , 涉及模型:课程记录,学生用户,学习记录三个模型 :return: """ # 课程记录, 批量创建 学生的 学习记录 course_record_ids = self.choice_ids # 查询所有课程记录对象 course_record_objs = CourseRecord.objects.filter(pk__in=course_record_ids) # 遍历所有课程记录 for each_course_record in course_record_objs: # 通过课程绑定的班级,再从班级获取该班级下所有的学生 # : customer_set 反向查询 student_objs = each_course_record.re_class.customer_set.all().filter(status='studying') study_record_bulk_list = [] for each_student in student_objs: # 每一个学生,当前课程记录是否存在,不存在则创建 if not StudyRecord.objects.filter(course_record=each_course_record, student=each_student).exist(): study_record_bulk_list.append(StudyRecord(course_record=each_course_record, student=each_student)) StudyRecord.objects.bulk_create(study_record_bulk_list, batch_size=100)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?