需求:用户将选择型问答提交,前端返回所有问答数据,将问答数据批量修改入到数据库中

model 

class QuestionnairQA(BaseModel):question_choices = ((1, _("问题1")),(2, _("问题2")),(3, _("问题3")),(4, _("问题4")),(5, _("问题5")))answer_choices = ((0, '未作答'),(1, 'A'),(2, 'B'),(3, 'C'),(4, 'D'),(5, 'E'),)# plan = models.ForeignKey(Plan, on_delete=models.SET_NULL, null=True, verbose_name="项目", db_constraint=False)# project_questionnair = models.ForeignKey(ProjectQuestionnaire, on_delete=models.SET_NULL, null=True,#                                          verbose_name="项目问卷", db_constraint=False)feedback = models.ForeignKey(FeedbackList, on_delete=models.SET_NULL, null=True, verbose_name="反馈列表", db_constraint=False)question = models.SmallIntegerField(choices=question_choices, default=0, verbose_name='问题')answer = models.SmallIntegerField(choices=answer_choices, default=0, verbose_name='回答')class Meta:db_table = "question_answer"verbose_name = "问答"verbose_name_plural = verbose_name

serializer

class QuestionnairQAListSerializer(serializers.ListSerializer):# 重写update函数def update(self, instance, validated_data):# print(instance)# print(validated_data)# 保存数据# self.child:是BookModelSerializer对象# 方式二:return [# self.child.update(对象,字典) for attrs in validated_dataself.child.update(instance[i], attrs) for i, attrs in enumerate(validated_data)]class QuestionnairQASerializer(serializers.ModelSerializer):question_detail = serializers.SerializerMethodField()def get_question_detail(self, instance):return instance.get_question_display()class Meta:model = QuestionnairQAlist_serializer_class = QuestionnairQAListSerializerfields = ('id', 'question', 'question_detail', 'answer')

view

@init_project@transaction.atomic()def update_question_answer(self, request):"""前端传的数据格式 [{'id': 1, question: 1, 'answer': 1},{'id': 2, question: 2, 'answer': 2}]"""if not request.data.get('feedback_id'):return Response_400('未选择反馈记录')qa_list = request.data.get('qa_list')# 查看选项中是否含有D/E选项answer = [data['answer'] for data in qa_list[0:4]]if 4 in answer or 5 in answer:# 有D或者E选项  修改反馈记录FeedbackList.objects.filter(id=request.data.get('feedback_id')).update(is_has_D_E=True)else:FeedbackList.objects.filter(id=request.data.get('feedback_id')).update(is_has_D_E=False)# 批量修改代码 将前端传入的数据格式化后 通过序列化器反序列化try:choices_qa = qa_list[0:5]pks = []for dic in choices_qa:pk = dic.pop('id')pks.append(pk)qa_query = QuestionnairQA.objects.filter(is_delete=False, id__in=pks).all()if len(pks) != len(qa_query):return Response_400('问答数据不完整')except Exception as e:return Response_400('问答数据不完整')serializer = self.get_serializer(instance=qa_query, data=choices_qa, many=True)serializer.is_valid(raise_exception=True)serializer.save()# 保存建议数据opinion = qa_list[-1]opinion_query = QuestionnaireOpinion.objects.get(id=opinion['id'])opinion_ser = QuestionnaireOpinionSerializer(opinion_query, opinion)opinion_ser.is_valid(raise_exception=True)opinion_ser.save()return Response_200(_(UPDATE_SUCCEEDED))

DRF批量修改序列化器使用相关推荐

  1. 谈谈Django REST Framework(DRF)中的序列化器

    摘要 Django REST Framework(DRF)是一个强大的工具,可以帮助我们构建和处理RESTful API.其中的序列化器(Serializers)是其核心组件之一,它允许我们快速有效地 ...

  2. 客户端序列码生成_Django REST Framework教程(2): 序列化器介绍及开发基于函数视图的API...

    在上篇文章中,我们已经介绍了为什么要学习DRF,什么是序列化以及什么是符合RESTful规范的Web API.在本篇文章中我们将以博客为例,使用DRF提供的序列化器(Serializers类)开发两个 ...

  3. Django REST Framework教程(4): 玩转序列化器(Serializer)

    在前面的文章中我们以博客为例,自定义了一个简单的 ArticleSerializer 类, 并分别以函数视图(FBV)和基于类的视图(CBV)编写了博客文章列表资源和单篇文章资源的API,支持客户端以 ...

  4. drf序列化器-Serializer

    Python之drf序列化器-Serializer 一.序列化器-Serializer的作用 序列化,序列化器会将模型类对象转化为字典,经过Response变成json字符串 反序列化,把客户发送过来 ...

  5. drf : 序列化器Serializer

    序列化器Serializer 作用: 序列化,序列化器会把模型对象转换成字典,经过request以后变成json字符串 反序列化,把客户端发送过来的数据,经过request以后变成字典(request ...

  6. DRF序列化器详细使用

    视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数据库进行改动,则需要拿到前端发来 ...

  7. DRF框架—序列化器中的字段校验规则

    一.怎么校验创建的项目名是否是唯一的,当项目名name字段不唯一,怎么设置提示信息? 方法:导入UniqueValidator from rest_framework.validators impor ...

  8. drf快速入门01---REST规范介绍序列化器的基础使用

    一. 基本规范 REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征性状态转移). 它首次出现在2000年Roy Fielding的博士论 ...

  9. 快速上手Django(六) -Django之Django drf 序列化器Serializer类

    文章目录 快速上手Django(六) -Django之Django drf 序列化器Serializer类 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSeria ...

最新文章

  1. 16. Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】
  2. Pandas/networkx图分析简单入门
  3. 【Java 线程的深入研究3】最简单实例说明wait、notify、notifyAll的使用方法
  4. python 投票脚本_使用Python脚本拉取2014 CSDN博客之星投票情况
  5. 300 行代码带你秒懂 Java 多线程!
  6. 计算机专业特殊人才上大学,上海交通大学计算机科学与工程系(CSE)
  7. python mro c3_Python 19 MRO和C3算法
  8. httpClient测试
  9. jsp主板 jtp_最新主板常见故障及解决(新)
  10. 2011-5-学习总结
  11. 产品特点概述-驰骋工作流
  12. java并发编程的艺术——第四章总结
  13. Qt设置字体类型及添加字体文件
  14. 秦羽接引的鸿蒙第四人,星辰变:秦羽用过的法宝一件比一件厉害,最后一件直接逆天改命!...
  15. 金行健:进门就被抓拍人脸自动注册会员,杭州一大学生将商场告上法庭
  16. ffmpeg实战教程(五)libswscale,libavfilter实践指南
  17. 数据决策系统功能整理
  18. Towards Better Understanding of Self-Supervised Representations / Q-Score
  19. 如何实现一篇数据新闻报道
  20. win7与ubuntu双系统,启动error:no such partition grub rescue

热门文章

  1. RSA密钥对生成工具代码
  2. JNI中创建新的线程回调java方法的技巧
  3. 神经网络训练样本太少,神经网络常用训练方法
  4. 免费获得minecraft账号,快来试试!!!
  5. [搞笑]后舍男生视频
  6. 人脸解锁手机与电影阿丽塔背后的3D原理:云从科技的技术突破
  7. 破解Excel的宏密码
  8. 给自己的网站添加在线客服代码
  9. 旧电脑又卡有慢,一招设置电脑最佳性能
  10. [渝粤教育] 南通大学 模拟电子技术 参考 资料