Merge branch 'master' of https://e.coding.net/ctcdevteam/cnas
This commit is contained in:
commit
14a563aac0
|
@ -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='所属认证类型'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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='文件地址'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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 = '实施规则'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'}
|
||||||
|
|
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue