python後端繼承序列化,不同訪問形式返回不同結果
阿新 • • 發佈:2020-11-27
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='自定義欄位') descriptionmodels.py= 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'
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 = ApproveConfSerializersViews.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