models.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # coding=utf-8
  2. from django.db import models
  3. from django.utils import timezone
  4. from django.conf import settings
  5. from apps.foundation.models import Subject
  6. from apps.examination.exampaper.models import ExamPaper
  7. from apps.examination.examquestion.models import ExamQuestion, ExamQuestionOption
  8. class Exam(models.Model):
  9. FIXED = 1
  10. RANDOM = 2
  11. TYPE_CHOICES = (
  12. (FIXED, u'固定试卷'),
  13. (RANDOM, u'随机试卷'),
  14. )
  15. TYPE_JSON = [{'id': item[0], 'value': item[1]} for item in TYPE_CHOICES]
  16. name = models.CharField(max_length=200, verbose_name=u"名称")
  17. subject = models.ForeignKey(Subject, verbose_name=u"科目", on_delete=models.PROTECT)
  18. type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"试卷类型")
  19. duration = models.IntegerField(verbose_name=u'时长')
  20. exam_time = models.DateTimeField(verbose_name=u"考试时间")
  21. exampaper = models.ForeignKey(ExamPaper, verbose_name=u"试卷", on_delete=models.PROTECT)
  22. desc = models.TextField(verbose_name=u"备注", null=True, blank=True)
  23. examinee_count = models.IntegerField(verbose_name=u'考试人数', default=0, editable=False)
  24. create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'添加人', editable=False, on_delete=models.PROTECT)
  25. create_time = models.DateTimeField(verbose_name=u"添加时间", default=timezone.now, editable=False)
  26. delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
  27. class Meta:
  28. db_table = "exam"
  29. ordering = ['-id']
  30. verbose_name = u"考试管理"
  31. default_permissions = ()
  32. class ExamLog(models.Model):
  33. MOCK = 1
  34. FORMAL = 2
  35. TYPE_CHOICES = (
  36. (MOCK, u'模拟考试'),
  37. (FORMAL, u'正式考试'),
  38. )
  39. TYPE_JSON = [{'id': item[0], 'value': item[1]} for item in TYPE_CHOICES]
  40. type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
  41. exam = models.ForeignKey(Exam, verbose_name=u"考试", null=True, blank=True, on_delete=models.PROTECT)
  42. exampaper = models.ForeignKey(ExamPaper, verbose_name=u"试卷", on_delete=models.PROTECT)
  43. user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'参加人员', on_delete=models.PROTECT)
  44. scores = models.IntegerField(verbose_name=u'分数', null=True, blank=True)
  45. rank = models.IntegerField(verbose_name=u'排名', null=True, blank=True)
  46. use_time = models.IntegerField(verbose_name=u'用时', null=True, blank=True)
  47. exam_time = models.DateTimeField(verbose_name=u"考试时间", null=True, blank=True)
  48. submit_time = models.DateTimeField(verbose_name=u"交卷时间", null=True, blank=True)
  49. single_answer_scores = models.IntegerField(verbose_name=u'单选题得分', default=0, editable=False)
  50. multiple_answer_scores = models.IntegerField(verbose_name=u'多选题得分', default=0, editable=False)
  51. fill_answer_scores = models.IntegerField(verbose_name=u'填空题得分', default=0, editable=False)
  52. judgment_answer_scores = models.IntegerField(verbose_name=u'判断题得分', default=0, editable=False)
  53. single_answer_count = models.IntegerField(verbose_name=u'单选题答对数', default=0, editable=False)
  54. multiple_answer_count = models.IntegerField(verbose_name=u'多选题答对数', default=0, editable=False)
  55. fill_answer_count = models.IntegerField(verbose_name=u'填空题答对数', default=0, editable=False)
  56. judgment_answer_count = models.IntegerField(verbose_name=u'判断题答对数', default=0, editable=False)
  57. class Meta:
  58. db_table = "exam_log"
  59. ordering = ['-id']
  60. verbose_name = u"考试记录"
  61. default_permissions = ()
  62. class ExamAnswerLog(models.Model):
  63. RIGHT = 1
  64. WRONG = 2
  65. NOTDONE = 3
  66. STATUS_CHOICES = (
  67. (RIGHT, u'正确'),
  68. (WRONG, u'错误'),
  69. (NOTDONE, u'未做'),
  70. )
  71. STATUS_JSON = [{'id': item[0], 'value': item[1]} for item in STATUS_CHOICES]
  72. main = models.ForeignKey(ExamLog, verbose_name=u"考试记录", on_delete=models.PROTECT)
  73. question = models.ForeignKey(ExamQuestion, verbose_name=u"试题", on_delete=models.PROTECT)
  74. status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'回答状态', default=NOTDONE)
  75. class Meta:
  76. db_table = "exam_answer_log"
  77. ordering = ['id']
  78. verbose_name = u"考试答题记录"
  79. default_permissions = ()
  80. class ExamAnswerOptionLog(models.Model):
  81. main = models.ForeignKey(ExamAnswerLog, verbose_name=u"考试答题记录", on_delete=models.PROTECT)
  82. option = models.ForeignKey(ExamQuestionOption, verbose_name=u"选项", on_delete=models.PROTECT)
  83. class Meta:
  84. db_table = "exam_answer_option_log"
  85. ordering = ['id']
  86. verbose_name = u"选择题回答"
  87. default_permissions = ()
  88. class ExamAnswerFillLog(models.Model):
  89. main = models.ForeignKey(ExamAnswerLog, verbose_name=u"考试答题记录", on_delete=models.PROTECT)
  90. content = models.TextField(verbose_name=u"内容")
  91. order = models.IntegerField(verbose_name=u'排序')
  92. class Meta:
  93. db_table = "exam_answer_fill_log"
  94. ordering = ['order', 'id']
  95. verbose_name = u"填空题回答"
  96. default_permissions = ()