zoukankan      html  css  js  c++  java
  • python后端继承序列化,不同访问形式返回不同结果

     http://192.168.56.100:8888/workorder/flowconf/

     http://192.168.56.100:8888/workorder/flowconf/1/

    1. 表设计

    from django.db import models
    
    # Create your models here.
    
    
    class FlowConf(models.Model):
        name = models.CharField('工作流名称', max_length=50)
        customfield = models.TextField(verbose_name='自定义字段')
        description = models.TextField(verbose_name='描述')
        def __str__(self):
            return self.name
        class Meta:
            db_table='tb_flowconf'
    
    
    
    
    class ApproveConf(models.Model):
        approve_type_chice= (
            ('1', "指定人员审批"),
            ('2', "角色组审批"),
        )
        flowconf=models.ForeignKey(FlowConf,on_delete=models.CASCADE)
        sequence = models.CharField(max_length=64,verbose_name='自批序号')
        approve_type_id= models.CharField(choices=approve_type_chice, default='1',max_length=16)
        approve_id = models.CharField(max_length=32,verbose_name='审批ID')
        def __str__(self):
            return self.sequence
        class Meta:
            db_table='tb_approveactionconf'
    models.py

    2. 视图

    from django.shortcuts import render
    
    # Create your views here.
    
    from rest_framework import viewsets
    from workflow.serializers import *
    from workflow.models import *
    
    
    from rest_framework.pagination import PageNumberPagination
    from django_filters.rest_framework import DjangoFilterBackend
    from rest_framework.filters import OrderingFilter
    
    # 分页(局部):自定义分页器 局部
    class PageNum(PageNumberPagination):
        # 查询字符串中代表每页返回数据数量的参数名, 默认值: None
        page_size_query_param = 'page_size'
    
    
    
    class FlowConfViewSet(viewsets.ModelViewSet):
        queryset =FlowConf.objects.all()
        serializer_class =FlowConfSerializers
        filter_backends = (DjangoFilterBackend, OrderingFilter)
        filter_fields = ('name',)
        # 3.分页:自定义分页器 覆盖全局配置
        pagination_class = PageNum
    
        #不同形式发访问返回不同的序列化
        def get_serializer_class(self):
            if self.action=='list':
                return FlowConfSerializers
            else:
                return FlowConfDeepSerializer
    
    
    class ApproveConfViewSet(viewsets.ModelViewSet):
        queryset = ApproveConf.objects.all()
        serializer_class = ApproveConfSerializers
    Views.py

    3序列化

    from rest_framework import serializers
    from workflow.models import *
    from user.models import User,Role
    
    #工单模板
    class FlowConfSerializers(serializers.ModelSerializer):
        class Meta:
            model=FlowConf
            fields="__all__"
    
    
    
    #审批流
    class ApproveConfSerializers(serializers.ModelSerializer):
        # 自定义字段
        approve_user=serializers.SerializerMethodField(required=False)
        class Meta:
            model=ApproveConf
            fields="__all__"
    
        def get_approve_user(self,row):
            print(row,'444444444444',type(row))
            approve_type_id=row.approve_type_id  #审批类型id
            approve_id=row.approve_id            #审批用户id或者角色id
    
            if approve_id=='1':
                '用户审批'
                approve=User.objects.get(id=approve_id)
                return {
                    'approve':approve.username,
                    'approve_type':'指定人员'
                }
            elif approve_id=='2':
                '角色审批'
                approve=Role.objects.get(id=approve_id)
                return {
                    'approve':approve.name,
                    'approve_type':'角色审批'
                }
            else:
                '其它审批类型待补充'
    
    
    
    
    
    
    
    #继承工单模板序列化
    class FlowConfDeepSerializer(FlowConfSerializers):
        approveconf_set=ApproveConfSerializers(many=True)
    serializers.py

  • 相关阅读:
    node基础(2)
    node基础知识(1)
    面试题1
    HTML5中的表单属性
    H5中元素的拖放
    Niagara基于javascript的控件开发
    CSS居中
    2018-3-21 url 、href、src
    2018-3-7 色彩的一些知识
    JS基本数据类型
  • 原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14050270.html
Copyright © 2011-2022 走看看