如何在Django中创建接收所有员工站立会议更新的单API
Django批量提交站立会议更新API实现方案
1. 约定请求数据格式
前端需按以下结构组装批量提交的JSON数据,其中team_id为本次站立会议所属团队ID,updates数组包含所有员工的更新内容:
{ "team_id": 1, "updates": [ { "employee_id": 5, "status": "in_progress", "work_done_yesterday": "完成用户登录接口开发", "work_to_do": "调试权限校验逻辑", "blockers": "暂无阻塞" }, { "employee_id": 6, "status": "completed", "work_done_yesterday": "完成订单列表页面", "work_to_do": "对接订单详情接口", "blockers": "接口文档待更新" } ] }
2. 编写序列化器
创建两个序列化器,分别处理批量提交的整体数据和单个员工的更新内容:
from rest_framework import serializers from .models import Standup, StandupUpdate, Team, Employee class StandupUpdateSerializer(serializers.ModelSerializer): # 用employee_id接收员工ID,映射到Employee外键 employee_id = serializers.PrimaryKeyRelatedField(queryset=Employee.objects.all(), source='employee') class Meta: model = StandupUpdate fields = ['employee_id', 'status', 'work_done_yesterday', 'work_to_do', 'blockers'] class BulkStandupSerializer(serializers.Serializer): team_id = serializers.PrimaryKeyRelatedField(queryset=Team.objects.all()) updates = StandupUpdateSerializer(many=True)
3. 实现批量处理视图
使用APIView自定义POST请求逻辑,先创建对应团队的Standup实例,再批量创建StandupUpdate记录:
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from django.utils import timezone from .models import Standup, StandupUpdate from .serializers import BulkStandupSerializer class BulkStandupSubmitView(APIView): def post(self, request): serializer = BulkStandupSerializer(data=request.data) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # 获取团队实例,创建本次站立会议记录 team = serializer.validated_data['team_id'] # 可选:如果要求同一团队一天仅一次站立会议,改用get_or_create # standup, created = Standup.objects.get_or_create( # team=team, # standup_time__date=timezone.now().date() # ) standup = Standup.objects.create(team=team) # 批量组装员工更新数据 update_instances = [] for update_data in serializer.validated_data['updates']: # 关联当前站立会议 update_data['standup'] = standup update_instances.append(StandupUpdate(**update_data)) # 批量插入数据库,提升性能 StandupUpdate.objects.bulk_create(update_instances) return Response({ "message": "批量更新保存成功", "standup_id": standup.id, "updated_count": len(update_instances) }, status=status.HTTP_201_CREATED)
4. 配置路由
在项目或应用的urls.py中添加API路由:
from django.urls import path from .views import BulkStandupSubmitView urlpatterns = [ path('api/bulk-standup-submit/', BulkStandupSubmitView.as_view(), name='bulk_standup_submit'), ]
5. 可选增强逻辑
- 权限校验:验证员工是否属于所选团队(假设
Employee与Team为多对多关系),在批量组装实例前添加:for update_data in serializer.validated_data['updates']: employee = update_data['employee'] if team not in employee.teams.all(): return Response( {"error": f"员工{employee.id}不属于团队{team.id}"}, status=status.HTTP_400_BAD_REQUEST ) - 重复提交校验:若需避免同一员工在同一次会议中重复提交,可在创建前检查
StandupUpdate是否存在对应记录。
内容的提问来源于stack exchange,提问作者Waleed Farrukh
相关产品推荐
相关产品推荐

