You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:10:31