add hash field form TestRecord model;add TestRecordDetailViewSet;
authorHongyuan Ma <CS_MaleicAcid@163.com>
Wed, 20 Jun 2018 12:32:13 +0000 (20:32 +0800)
committerHongyuan Ma <CS_MaleicAcid@163.com>
Wed, 20 Jun 2018 12:32:13 +0000 (20:32 +0800)
web/apps/test_records/models.py
web/apps/test_records/serializer.py
web/apps/test_records/views.py
web/pgperffarm/urls.py

index df89e222e491afb88941521eadaa00dfec846cb1..bc81771d6c3d7842b765bfebbff8f0646c5ba8ce 100644 (file)
@@ -98,6 +98,7 @@ class TestRecord(models.Model):
     test_desc = models.TextField(verbose_name="test desc", help_text="test desc")
     # test_branch_id = models.ForeignKey(TestBranch, verbose_name="test category", help_text="test category")
     meta_time = models.DateTimeField(default=timezone.now, verbose_name="meta time")
+    hash = models.CharField(unique=True, default='', max_length=32, verbose_name="record hash", help_text="record hash")
     add_time = models.DateTimeField(default=timezone.now, verbose_name="test added time")
 
     class Meta:
index 1389968979ba5d1b6197c71e723cfbb5a8862ed9..e4cad4bbc7dca4051fc8f3394950c7accbfde092 100644 (file)
@@ -90,7 +90,7 @@ class TestRecordListSerializer(serializers.ModelSerializer):
     # client_max_num = serializers.SerializerMethodField()
     class Meta:
         model = TestRecord
-        fields = ('add_time', 'machine_info', 'pg_info', 'trend', 'linux_info', 'meta_info')
+        fields = ('hash', 'add_time', 'machine_info', 'pg_info', 'trend', 'linux_info', 'meta_info')
 
     def get_trend(self, obj):
         dataset_list = TestDataSet.objects.filter(test_record_id=obj.id).values_list('status').annotate(Count('id'))
@@ -120,7 +120,7 @@ class TestRecordListSerializer(serializers.ModelSerializer):
 
 
     def get_machine_info(self, obj):
-        machine_data = UserMachine.objects.filter(Q(id=obj.test_machine_id))
+        machine_data = UserMachine.objects.filter(id=obj.test_machine_id)
 
         machine_info_serializer = UserMachineSerializer(machine_data,many=True, context={'request': self.context['request']})
         return machine_info_serializer.data
@@ -130,6 +130,13 @@ class TestRecordListSerializer(serializers.ModelSerializer):
     #     rw_client_num = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=2).order_by('clients').distinct('clients').count()
     #     return max(ro_client_num,rw_client_num)
 
+
+class TestDataSetSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = TestDataSet
+        fields = "__all__"
+
 class TestRecordDetailSerializer(serializers.ModelSerializer):
 
     '''
@@ -138,20 +145,33 @@ class TestRecordDetailSerializer(serializers.ModelSerializer):
     pg_info =PGInfoSerializer()
     linux_info = LinuxInfoSerializer()
     meta_info = MetaInfoSerializer()
-    ro_info = serializers.SerializerMethodField()
-    rw_info = serializers.SerializerMethodField()
+    dataset_info = serializers.SerializerMethodField()
+    rw_info = serializers.SerializerMethodField()
     class Meta:
         model = TestRecord
         fields = "__all__"
 
-    def get_ro_info(self, obj):
-        all_data = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=1)
-
-        ro_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']})
-        return ro_info_serializer.data
-
-    def get_rw_info(self, obj):
-        all_data = TestResult.objects.filter(Q(test_record_id=obj.id) ,test_cate_id=2)
-
-        rw_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']})
-        return rw_info_serializer.data
+    def get_dataset_info(self, obj):
+        dataset_list = TestDataSet.objects.filter(test_record_id=obj.id).values_list('scale').annotate(Count('id'))
+        # print(target_dataset)
+
+        dataset = {}
+        # < QuerySet[(20, 2), (10, 4)] >
+        for item in dataset_list:
+            dataset[item[0]] = []
+            target_dataset = TestDataSet.objects.filter(test_record_id=obj.id, scale=item[0])
+            dataset_serializer = TestDataSetSerializer(target_dataset, many=True)
+            dataset[item[0]] = dataset_serializer.data
+        return dataset
+
+    # def get_ro_info(self, obj):
+    #     all_data = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=1)
+    #
+    #     ro_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']})
+    #     return ro_info_serializer.data
+    #
+    # def get_rw_info(self, obj):
+    #     all_data = TestResult.objects.filter(Q(test_record_id=obj.id) ,test_cate_id=2)
+    #
+    #     rw_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']})
+    #     return rw_info_serializer.data
index 5e259426c0b4448dcbd64dbe2b8e7e20a5824b9e..7b279ac9a93f6d6b78db58811e6e6d7e69f28fcc 100644 (file)
@@ -33,13 +33,12 @@ class TestRecordListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
     queryset = TestRecord.objects.all().order_by('add_time')
     serializer_class = TestRecordListSerializer
     pagination_class = StandardResultsSetPagination
-
-
-class TestRecordDetailViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
+class TestRecordDetailViewSet( mixins.RetrieveModelMixin, viewsets.GenericViewSet):
     """
-    List test records
+    detail test records
     """
-    queryset = TestRecord.objects.all()
+    lookup_field = 'hash'
+    queryset = TestRecord.objects.all().order_by('add_time')
     serializer_class = TestRecordDetailSerializer
     pagination_class = StandardResultsSetPagination
 
index 32fd12647d6f98d72d19064c70fe5490cea934fd..2b88d34d894d9c1ba01e061a3f1ba1ab917d3edd 100644 (file)
@@ -19,7 +19,7 @@ from django.views.generic.base import RedirectView
 
 from rest_framework.documentation import include_docs_urls
 from rest_framework.routers import DefaultRouter
-from test_records.views import TestRecordListViewSet, TestRecordDetailViewSet, TestRecordCreate
+from test_records.views import TestRecordListViewSet, TestRecordCreate, TestRecordDetailViewSet
 from test_records.auth import MachineAuthToken
 # from test_records.view_base import TestListView
 
@@ -29,8 +29,8 @@ from test_records.auth import MachineAuthToken
 #     'post': 'create'
 # })
 router = DefaultRouter()
-router.register(r'records', TestRecordListViewSet,base_name="records")
-router.register(r'detail', TestRecordDetailViewSet ,base_name="detail")
+router.register(r'records', TestRecordListViewSet, base_name="records")
+router.register(r'detail', TestRecordDetailViewSetbase_name="detail")
 
 # router.register(r'detail', TestRecordListViewSet)
 
@@ -42,7 +42,7 @@ urlpatterns = [
     url(r'^', include(router.urls)),
     # url(r'status/$', test_record_list, name='test-list'),
     # url(r'status/$', TestListView.as_view(), name='test-list'),
-
+    # url(r'detail', TestRecordDetailViewSet ,name="detail"),
     url(r'upload/$', TestRecordCreate, name='test-upload'),
     url(r'docs/', include_docs_urls(title='pgperffarm')),
     # Static pages