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

原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14050270.html