版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
示例的序列化器
class AddFlowBodySerializer(serializers.ModelSerializer, BaseModelSerializer):
approval_flow = serializers.IntegerField(label='审批流ID') # 该字段是不属于 FlowBody 模型
class Meta:
model = FlowBody # 模型
exclude = ('deleted','object_flow','user',)
validators = [UniqueTogetherValidator(queryset=FlowBody.objects.all(), fields=['abstract',], message='该摘要已经存在')]
def validate(self, attrs):
attrs['user'] = self.context['request'].user
approval_flow = ApprovalFlow.objects.filter(id=attrs['approval_flow']).first()
if not approval_flow:
raise serializers.ValidationError("审批流不存在")
# 动态创建一个 objectflow
objectflow = ObjectFlow(name=approval_flow.name)
objectflow.save()
attrs['object_flow'] = objectflow
# 删除掉 不属于 FlowBody 模型的字段
del attrs['approval_flow']
return attrs
示例的viewset视图
# 审批主体 ModelViewSet视图
class FlowBodyViewset(ModelViewSet):
'''
修改局部数据
create: 创建审批主体
retrieve: 检索某个审批主体
update: 更新审批主体
destroy: 删除审批主体
list: 获取审批主体列表
'''
queryset = FlowBody.objects.all().order_by('-updated')
authentication_classes = (JWTAuthentication,)
permission_classes = [BaseAuthPermission, ]
throttle_classes = [VisitThrottle]
serializer_class = ReturnFlowBodySerializer
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter,)
search_fields = ('abstract', 'content', )
filter_fields = ('user', 'object_flow', )
ordering_fields = ('updated', 'sort_time', 'created',)
pagination_class = Pagination
def get_serializer_class(self):
if self.action == 'create':
return AddFlowBodySerializer
if self.action == 'update' or self.action == 'partial_update':
return UpdateFlowBodySerializer
return ReturnFlowBodySerializer
def get_queryset(self):
if bool(self.request.auth) and self.request.user.group_id == 1:
return FlowBody.objects.all().order_by('-updated')
else:
return FlowBody.objects.filter(user_id=self.request.user.id).order_by('-updated')
# 重写create方法,让在创建成功后的approval_flow不返回
def create(self, request, *args, **kwargs):
print('查看data:', request.data)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
flowbody = FlowBody.objects.filter(abstract=request.data.get('abstract')).first()
json_data = ReturnFlowBodySerializer(flowbody).data
return Response(json_data, status=status.HTTP_201_CREATED)