examtest/test_server/examtest/serializers.py

153 lines
5.9 KiB
Python

from rest_framework import serializers
from question.models import Questioncat
from crm.models import Consumer
from .models import ExamTest, AnswerDetail, Banner
from .models_paper import TestRule, WorkScope, Paper, PaperQuestions
from question.serializers import QuestionSerializer
class BannerSerializer(serializers.ModelSerializer):
"""
轮播图序列化
"""
class Meta:
model = Banner
fields = ('id','name','path', 'url', 'sort')
class TestRuleSerializer(serializers.ModelSerializer):
"""
规则序列化
"""
create_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
update_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
class Meta:
model = TestRule
fields = '__all__'
class WorkScopeSerializer(serializers.ModelSerializer):
"""
工作类别序列化
"""
create_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
update_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
subject_name = serializers.StringRelatedField(source='subject',read_only=True)
class Meta:
model = WorkScope
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.prefetch_related('questioncat',)
return queryset
class MoniTestSerializer(serializers.ModelSerializer):
"""
模考序列化
"""
start_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
end_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
consumer = serializers.PrimaryKeyRelatedField(queryset=Consumer.objects.all(), required=False)
create_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
update_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
class Meta:
model = ExamTest
fields = '__all__'
class ExamTestListSerializer(serializers.ModelSerializer):
"""
考试列表序列化
"""
start_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
end_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
workscope_name = serializers.StringRelatedField(source='workscope', read_only=True)
paper_name = serializers.StringRelatedField(source='paper', read_only=True)
consumer_name = serializers.SerializerMethodField()
took_format = serializers.SerializerMethodField()
consumer_company_name = serializers.SerializerMethodField()
class Meta:
model = ExamTest
exclude = ('detail',)
def get_consumer_name(self, obj):
return obj.consumer.name
def get_took_format(self, obj):
m, s = divmod(obj.took, 60)
h, m = divmod(m, 60)
return "%02d:%02d:%02d" % (h, m, s)
def get_consumer_company_name(self, obj):
if obj.consumer.company:
return obj.consumer.company.name
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.select_related('consumer','paper', 'workscope')
return queryset
class AnswerDetailSerializer(serializers.ModelSerializer):
class Meta:
model = AnswerDetail
exclude = ('examtest',)
# fields = '__all__'
depth = 1
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
# select_related for "to-one" relationships
queryset = queryset.select_related('examtest',)
# prefetch_related for "to-many" relationships
queryset = queryset.prefetch_related(
'question',)
# Prefetch for subsets of relationships
# queryset = queryset.prefetch_related(
# Prefetch('unaffiliated_attendees',
# queryset=Attendee.objects.filter(organization__isnull=True))
# )
return queryset
class AnswerDetailCreateSerializer(serializers.ModelSerializer):
class Meta:
model = AnswerDetail
fields = '__all__'
class PaperSerializer(serializers.ModelSerializer):
create_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
update_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
workscope_name = serializers.StringRelatedField(source='workscope', read_only=True)
class Meta:
model = Paper
exclude = ('questions',)
class PaperQuestionsDetailSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source='question.id')
name = serializers.ReadOnlyField(source='question.name')
options = serializers.ReadOnlyField(source='question.options')
right = serializers.ReadOnlyField(source='question.right')
type = serializers.ReadOnlyField(source='question.type')
questioncat_name = serializers.ReadOnlyField(source='question.questioncat.name')
level = serializers.ReadOnlyField(source='question.level')
class Meta:
model = PaperQuestions
fields = ('id','name','options','right','type','level','total_score','questioncat_name')
class PaperDetailSerializer(serializers.ModelSerializer):
create_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
update_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
workscope_name = serializers.StringRelatedField(source='workscope', read_only=True)
questions = PaperQuestionsDetailSerializer(source='paperquestions_set', many=True, read_only=True)
class Meta:
model = Paper
fields = '__all__'
class PaperQuestionsCreateSerializer(serializers.ModelSerializer):
class Meta:
model = PaperQuestions
fields = '__all__'