paper 字段修改

This commit is contained in:
caoqianming 2022-11-04 17:14:49 +08:00
parent 851e9291ab
commit d45afb9861
2 changed files with 55 additions and 11 deletions

View File

@ -50,10 +50,10 @@ class Question(CommonAModel):
class Paper(CommonAModel):
name = models.CharField(max_length=200, verbose_name='名称')
questions = models.ManyToManyField(Question, through='PaperQuestions')
questions = models.ManyToManyField(Question, through='PaperQuestion')
limit = models.IntegerField(default=0, verbose_name='限时(分钟)')
total_score = models.FloatField(default=0, verbose_name='满分')
pass_score = models.FloatField(default=0, verbose_name='及格分数')
pass_score = models.FloatField(default=0, verbose_name='通过分数')
danxuan_count = models.IntegerField(default=0, verbose_name='单选数量')
danxuan_score = models.FloatField(default=2, verbose_name='单选分数')
duoxuan_count = models.IntegerField(default=0, verbose_name='多选数量')
@ -68,7 +68,7 @@ class Paper(CommonAModel):
return self.name
class PaperQuestions(BaseModel):
class PaperQuestion(BaseModel):
paper = models.ForeignKey(Paper, on_delete=models.CASCADE, verbose_name='试卷')
question = models.ForeignKey(Question, on_delete=models.CASCADE, verbose_name='试题')
total_score = models.FloatField(default=0, verbose_name='单题满分')
@ -78,7 +78,7 @@ class Exam(CommonAModel):
"""
组织的正式考试
"""
code = models.CharField('考试编号', max_length=100, null=True, blank=True)
code = models.CharField('考试编号', max_length=100, null=True, blank=True, unique=True)
name = models.CharField('名称', max_length=100)
place = models.CharField('考试地点', max_length=100, null=True, blank=True)
open_time = models.DateTimeField('开启时间', null=True, blank=True)
@ -91,7 +91,7 @@ class Exam(CommonAModel):
def __str__(self):
return self.name
class ExamTest(CommonAModel):
class ExamRecord(CommonAModel):
'''
考试记录表
'''
@ -111,16 +111,17 @@ class ExamTest(CommonAModel):
end_time = models.DateTimeField(verbose_name='结束答题时间')
detail = models.ManyToManyField(Question, verbose_name='答题记录', through='AnswerDetail')
is_pass = models.BooleanField(default=True, verbose_name='是否通过')
exam = models.ForeignKey(Exam, verbose_name='关联的正式考试', null=True, blank=True, related_name='examtest_exam', on_delete= models.SET_NULL)
exam = models.ForeignKey(Exam, verbose_name='关联的正式考试', null=True, blank=True, on_delete= models.SET_NULL)
questions = JSONField(default=list, verbose_name='下发的题目列表', blank=True)
class Meta:
verbose_name = '模拟考试'
verbose_name = '考试记录'
verbose_name_plural = verbose_name
class AnswerDetail(BaseModel):
examtest = models.ForeignKey(ExamTest, on_delete=models.CASCADE, related_name='answerdetail_examtest')
examrecord = models.ForeignKey(ExamRecord, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
user_answer = JSONField(null=True,blank=True)
score = models.FloatField(default=0, verbose_name='本题得分')

View File

@ -1,6 +1,7 @@
from rest_framework.serializers import ModelSerializer, CharField
from rest_framework.serializers import ModelSerializer, CharField, Serializer, SerializerMethodField, FloatField
from rest_framework import serializers
from apps.exam.models import Question, Questioncat, Paper, Exam
from apps.exam.models import Question, Questioncat, Paper, Exam, PaperQuestion
class QuestioncatSerializer(ModelSerializer):
@ -20,6 +21,45 @@ class PaperSerializer(ModelSerializer):
model = Paper
exclude = ('questions',)
class QuestionReadSerializer(ModelSerializer):
class Meta:
model = Question
exclude = ['right']
class PaperQuestionSerializer(Serializer):
id = CharField(label='题目ID')
total_score = FloatField(label='单题满分')
class PaperCreateUpdateSerializer(ModelSerializer):
questions_ = PaperQuestionSerializer(many=True)
class Meta:
model = Paper
fields = '__all__'
class PaperQuestionDetailSerializer(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')
img = serializers.ReadOnlyField(source='question.img')
questioncat_name = serializers.ReadOnlyField(source='question.questioncat.name')
level = serializers.ReadOnlyField(source='question.level')
class Meta:
model = PaperQuestion
fields = ('id','name','options','right','type','level','total_score','questioncat_name', 'img')
class PaperDetailSerializer(ModelSerializer):
questions_ = SerializerMethodField()
class Meta:
model = Paper
fields = '__all__'
def get_questions_(self, instance):
pqs = PaperQuestion.objects.filter(paper=instance)
return PaperQuestionDetailSerializer(pqs, many=True).data
class ExamCreateUpdateSerializer(ModelSerializer):
class Meta:
model = Exam
@ -29,4 +69,7 @@ class ExamListSerializer(ModelSerializer):
create_by_name = CharField(source='create_by.name', read_only=True)
class Meta:
model = Exam
fields = '__all__'
fields = '__all__'
class ExamAttendSerializer(Serializer):
code = CharField(label="考试编号")