153 lines
5.9 KiB
Python
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__'
|
|
|