paper 字段修改
This commit is contained in:
parent
851e9291ab
commit
d45afb9861
|
|
@ -50,10 +50,10 @@ class Question(CommonAModel):
|
||||||
|
|
||||||
class Paper(CommonAModel):
|
class Paper(CommonAModel):
|
||||||
name = models.CharField(max_length=200, verbose_name='名称')
|
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='限时(分钟)')
|
limit = models.IntegerField(default=0, verbose_name='限时(分钟)')
|
||||||
total_score = models.FloatField(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_count = models.IntegerField(default=0, verbose_name='单选数量')
|
||||||
danxuan_score = models.FloatField(default=2, verbose_name='单选分数')
|
danxuan_score = models.FloatField(default=2, verbose_name='单选分数')
|
||||||
duoxuan_count = models.IntegerField(default=0, verbose_name='多选数量')
|
duoxuan_count = models.IntegerField(default=0, verbose_name='多选数量')
|
||||||
|
|
@ -68,7 +68,7 @@ class Paper(CommonAModel):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class PaperQuestions(BaseModel):
|
class PaperQuestion(BaseModel):
|
||||||
paper = models.ForeignKey(Paper, on_delete=models.CASCADE, verbose_name='试卷')
|
paper = models.ForeignKey(Paper, on_delete=models.CASCADE, verbose_name='试卷')
|
||||||
question = models.ForeignKey(Question, on_delete=models.CASCADE, verbose_name='试题')
|
question = models.ForeignKey(Question, on_delete=models.CASCADE, verbose_name='试题')
|
||||||
total_score = models.FloatField(default=0, 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)
|
name = models.CharField('名称', max_length=100)
|
||||||
place = models.CharField('考试地点', max_length=100, null=True, blank=True)
|
place = models.CharField('考试地点', max_length=100, null=True, blank=True)
|
||||||
open_time = models.DateTimeField('开启时间', null=True, blank=True)
|
open_time = models.DateTimeField('开启时间', null=True, blank=True)
|
||||||
|
|
@ -91,7 +91,7 @@ class Exam(CommonAModel):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
class ExamTest(CommonAModel):
|
class ExamRecord(CommonAModel):
|
||||||
'''
|
'''
|
||||||
考试记录表
|
考试记录表
|
||||||
'''
|
'''
|
||||||
|
|
@ -111,16 +111,17 @@ class ExamTest(CommonAModel):
|
||||||
end_time = models.DateTimeField(verbose_name='结束答题时间')
|
end_time = models.DateTimeField(verbose_name='结束答题时间')
|
||||||
detail = models.ManyToManyField(Question, verbose_name='答题记录', through='AnswerDetail')
|
detail = models.ManyToManyField(Question, verbose_name='答题记录', through='AnswerDetail')
|
||||||
is_pass = models.BooleanField(default=True, verbose_name='是否通过')
|
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:
|
class Meta:
|
||||||
verbose_name = '模拟考试'
|
verbose_name = '考试记录'
|
||||||
verbose_name_plural = verbose_name
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class AnswerDetail(BaseModel):
|
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)
|
question = models.ForeignKey(Question, on_delete=models.CASCADE)
|
||||||
user_answer = JSONField(null=True,blank=True)
|
user_answer = JSONField(null=True,blank=True)
|
||||||
score = models.FloatField(default=0, verbose_name='本题得分')
|
score = models.FloatField(default=0, verbose_name='本题得分')
|
||||||
|
|
|
||||||
|
|
@ -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):
|
class QuestioncatSerializer(ModelSerializer):
|
||||||
|
|
@ -20,6 +21,45 @@ class PaperSerializer(ModelSerializer):
|
||||||
model = Paper
|
model = Paper
|
||||||
exclude = ('questions',)
|
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 ExamCreateUpdateSerializer(ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Exam
|
model = Exam
|
||||||
|
|
@ -30,3 +70,6 @@ class ExamListSerializer(ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Exam
|
model = Exam
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
class ExamAttendSerializer(Serializer):
|
||||||
|
code = CharField(label="考试编号")
|
||||||
Loading…
Reference in New Issue