This commit is contained in:
shilixia 2020-06-24 14:24:31 +08:00
commit 14a563aac0
7 changed files with 84 additions and 6 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.5 on 2020-06-24 03:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('certset', '0004_unittype_description'),
]
operations = [
migrations.AddField(
model_name='implementrule',
name='cert_type',
field=models.CharField(choices=[('ccc', '强制性产品认证'), ('pv', '自愿性产品认证'), ('sys', '管理体系认证')], default='pv', max_length=50, verbose_name='所属认证类型'),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.5 on 2020-06-24 05:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('certset', '0005_implementrule_cert_type'),
]
operations = [
migrations.AddField(
model_name='implementrule',
name='path',
field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='文件地址'),
),
]

View File

@ -27,8 +27,16 @@ class Standard(CommonAModel):
class ImplementRule(CommonAModel): class ImplementRule(CommonAModel):
cert_type_choices = (
('ccc', '强制性产品认证'),
('pv', '自愿性产品认证'),
('sys', '管理体系认证')
)
name = models.CharField('规则名称', max_length=1000) name = models.CharField('规则名称', max_length=1000)
code = models.CharField('编号', max_length=30, unique=True) code = models.CharField('编号', max_length=30, unique=True)
cert_type = models.CharField('所属认证类型', max_length=50,
choices=cert_type_choices, default='pv')
standards = models.ManyToManyField(Standard, blank=True, verbose_name='依据标准', related_name='implementrules_standards') standards = models.ManyToManyField(Standard, blank=True, verbose_name='依据标准', related_name='implementrules_standards')
ccc_list = models.ManyToManyField(Dict, blank=True, verbose_name='CCC产品认证目录', related_name= 'implementrule_ccc_list') ccc_list = models.ManyToManyField(Dict, blank=True, verbose_name='CCC产品认证目录', related_name= 'implementrule_ccc_list')
pv_scope = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='自愿性产品认证领域', related_name= 'implementrule_pv_scope') pv_scope = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='自愿性产品认证领域', related_name= 'implementrule_pv_scope')
@ -36,6 +44,7 @@ class ImplementRule(CommonAModel):
cnas_scope = models.ManyToManyField(Dict, blank=True, verbose_name='CNAS业务范围', related_name= 'implementrule_cnas_scope') cnas_scope = models.ManyToManyField(Dict, blank=True, verbose_name='CNAS业务范围', related_name= 'implementrule_cnas_scope')
economy_class = models.ManyToManyField(Dict, blank=True, verbose_name='国民经济分类', related_name= 'implementrule_economy_class') economy_class = models.ManyToManyField(Dict, blank=True, verbose_name='国民经济分类', related_name= 'implementrule_economy_class')
cert_pattern = models.ManyToManyField(Dict, blank=True, verbose_name='认证模式', related_name= 'implementrule_cert_pattern') cert_pattern = models.ManyToManyField(Dict, blank=True, verbose_name='认证模式', related_name= 'implementrule_cert_pattern')
path = models.CharField('文件地址', max_length=1000, null=True, blank=True)
class Meta: class Meta:
verbose_name = '实施规则' verbose_name = '实施规则'

View File

@ -2,6 +2,8 @@ from rest_framework import serializers
from .models import Standard, UnitType, ImplementRule from .models import Standard, UnitType, ImplementRule
from apps.system.serializers import DictSerializer
class StandardSerializer(serializers.ModelSerializer): class StandardSerializer(serializers.ModelSerializer):
class Meta: class Meta:
@ -13,6 +15,22 @@ class ImplementRuleSerializer(serializers.ModelSerializer):
model = ImplementRule model = ImplementRule
fields = '__all__' fields = '__all__'
class ImplementRuleListSerializer(serializers.ModelSerializer):
pv_scope = DictSerializer()
pv_class = DictSerializer()
cert_type = serializers.SerializerMethodField()
class Meta:
model = ImplementRule
fields = ['id', 'code', 'name', 'cert_type', 'pv_scope', 'pv_class', 'create_time']
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.select_related('pv_scope','pv_class')
return queryset
def get_cert_type(self, obj):
return obj.get_cert_type_display()
class UnitTypeSerializer(serializers.ModelSerializer): class UnitTypeSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = UnitType model = UnitType

View File

@ -1,7 +1,7 @@
from django.shortcuts import render from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from .models import Standard, UnitType, ImplementRule from .models import Standard, UnitType, ImplementRule
from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer, ImplementRuleListSerializer
# Create your views here. # Create your views here.
class StandardViewSet(ModelViewSet): class StandardViewSet(ModelViewSet):
@ -18,10 +18,22 @@ class ImplementRuleViewSet(ModelViewSet):
'put': 'implementrule_update', 'delete': 'implementrule_delete'} 'put': 'implementrule_update', 'delete': 'implementrule_delete'}
queryset = ImplementRule.objects queryset = ImplementRule.objects
serializer_class = ImplementRuleSerializer serializer_class = ImplementRuleSerializer
search_fields = ['name', 'code'] search_fields = ['name', 'code', 'cert_type']
filterset_fields = ['pv_scope'] filterset_fields = ['pv_scope', 'cert_type']
ordering = ['-create_time'] ordering = ['-create_time']
def get_serializer_class(self):
# 根据请求类型动态变更serializer
if self.action == 'list':
return ImplementRuleListSerializer
return ImplementRuleSerializer
def get_queryset(self):
queryset = self.queryset
if hasattr(self.get_serializer_class(), 'setup_eager_loading'):
queryset = self.get_serializer_class().setup_eager_loading(queryset) # 性能优化
return queryset
class UnitTypedViewSet(ModelViewSet): class UnitTypedViewSet(ModelViewSet):
perms_map = {'get': '*', 'post': 'unittype_create', perms_map = {'get': '*', 'post': 'unittype_create',
'put': 'unittype_update', 'delete': 'unittype_delete'} 'put': 'unittype_update', 'delete': 'unittype_delete'}

View File

@ -30,10 +30,13 @@ class DictSerializer(serializers.ModelSerializer):
""" """
数据字典序列化 数据字典序列化
""" """
fullname = serializers.SerializerMethodField(read_only=True)
class Meta: class Meta:
model = Dict model = Dict
fields = '__all__' fields = '__all__'
def get_fullname(self, obj):
return obj.code + obj.name
class PositionSerializer(serializers.ModelSerializer): class PositionSerializer(serializers.ModelSerializer):
""" """

View File

@ -75,7 +75,7 @@ class DictViewSet(ModelViewSet):
perms_map = {'get': '*', 'post': 'dict_create', perms_map = {'get': '*', 'post': 'dict_create',
'put': 'dict_update', 'delete': 'dict_delete'} 'put': 'dict_update', 'delete': 'dict_delete'}
queryset = Dict.objects.get_queryset(all=True) # 获取全部的,包括软删除的 queryset = Dict.objects.get_queryset(all=True) # 获取全部的,包括软删除的
filterset_fields = ['type', 'is_deleted'] filterset_fields = ['type', 'is_deleted', 'type__code']
serializer_class = DictSerializer serializer_class = DictSerializer
search_fields = ['name'] search_fields = ['name']
ordering_fields = ['sort'] ordering_fields = ['sort']
@ -83,9 +83,9 @@ class DictViewSet(ModelViewSet):
def paginate_queryset(self, queryset): def paginate_queryset(self, queryset):
""" """
如果查询参数里有type,则不分页,否则请求分页 如果查询参数里有type或type__code,则不分页,否则请求分页
""" """
if (self.request.query_params.get('type', None)) or (self.paginator is None): if (self.request.query_params.get('type__code', None)) or (self.request.query_params.get('type', None)) or (self.paginator is None):
return None return None
return self.paginator.paginate_queryset(queryset, self.request, view=self) return self.paginator.paginate_queryset(queryset, self.request, view=self)