models.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. # coding=utf-8
  2. from django.db import models
  3. from django.utils import timezone
  4. from django.conf import settings
  5. from utils.exceptions import CustomError
  6. from apps.foundation.models import Chapter
  7. class ExamQuestion(models.Model):
  8. SINGLE = 1
  9. MULTIPLE = 2
  10. FILL = 3
  11. JUDGMENT = 4
  12. DISCUSS = 5
  13. TYPE_CHOICES = (
  14. (SINGLE, u'单选题'),
  15. (MULTIPLE, u'多选题'),
  16. (FILL, u'填空题'),
  17. (JUDGMENT, u'判断题'),
  18. (DISCUSS, u'论述题'),
  19. )
  20. TYPE_JSON = [{'id': item[0], 'value': item[1]} for item in TYPE_CHOICES]
  21. SIMPLE = 1
  22. MID = 2
  23. HARD = 3
  24. DIFFICULTY_CHOICES = (
  25. (SIMPLE, u'简单'),
  26. (MID, u'中等'),
  27. (HARD, u'困难'),
  28. )
  29. DIFFICULTY_JSON = [{'id': item[0], 'value': item[1]} for item in DIFFICULTY_CHOICES]
  30. chapter = models.ForeignKey(Chapter, verbose_name=u"章节", on_delete=models.PROTECT)
  31. type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"题型")
  32. difficulty = models.PositiveSmallIntegerField(choices=DIFFICULTY_CHOICES, verbose_name=u"难度")
  33. scores = models.IntegerField(verbose_name=u'分数')
  34. title = models.TextField(verbose_name=u"题目")
  35. judgment = models.BooleanField(verbose_name=u'判断题答案', default=False)
  36. analysis = models.TextField(verbose_name=u"解析", null=True, blank=True)
  37. discuss_answer = models.TextField(verbose_name=u"论述题答案", null=True, blank=True)
  38. create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'录入人',related_name='exam_question_user', editable=False, on_delete=models.PROTECT)
  39. create_time = models.DateTimeField(verbose_name=u"录入时间", default=timezone.now, editable=False)
  40. delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
  41. class Meta:
  42. db_table = "exam_question"
  43. ordering = ['-id']
  44. verbose_name = u"试题管理"
  45. default_permissions = ()
  46. class ExamQuestionOption(models.Model):
  47. main = models.ForeignKey(ExamQuestion, verbose_name=u"试题", on_delete=models.PROTECT)
  48. content = models.TextField(verbose_name=u"内容")
  49. right = models.BooleanField(verbose_name=u'正确答案', default=False)
  50. delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
  51. class Meta:
  52. db_table = "exam_question_option"
  53. ordering = ['id']
  54. verbose_name = u"选择题选项" # 单选、多选
  55. default_permissions = ()
  56. class ExamQuestionFill(models.Model):
  57. main = models.ForeignKey(ExamQuestion, verbose_name=u"试题", on_delete=models.PROTECT)
  58. content = models.TextField(verbose_name=u"内容")
  59. order = models.IntegerField(verbose_name=u'排序')
  60. delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
  61. class Meta:
  62. db_table = "exam_question_fill"
  63. ordering = ['order', 'id']
  64. verbose_name = u"试题填空"
  65. default_permissions = ()
  66. class ExamQuestionFeedback(models.Model):
  67. TYPE = 1
  68. ANSWER = 2
  69. ANALYSIS = 3
  70. OTHER = 4
  71. TYPE_CHOICES = (
  72. (TYPE, u'题目类型'),
  73. (ANSWER, u'题目答案'),
  74. (ANALYSIS, u'题目解析'),
  75. (OTHER, u'其它'),
  76. )
  77. TYPE_JSON = [{'id': item[0], 'value': item[1]} for item in TYPE_CHOICES]
  78. UNTREATED = 1
  79. PROCESSED = 2
  80. STATUS_CHOICES = (
  81. (UNTREATED, u'未处理'),
  82. (PROCESSED, u'已处理'),
  83. )
  84. STATUS_JSON = [{'id': item[0], 'value': item[1]} for item in STATUS_CHOICES]
  85. main = models.ForeignKey(ExamQuestion, verbose_name=u"试题", on_delete=models.PROTECT)
  86. type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"错误类型")
  87. desc = models.TextField(verbose_name=u"错误描述", null=True, blank=True)
  88. create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'反馈人',related_name='exam_question_feedback_user', editable=False, on_delete=models.PROTECT)
  89. create_time = models.DateTimeField(verbose_name=u"反馈时间", default=timezone.now, editable=False)
  90. status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'处理状态', default=UNTREATED)
  91. process_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"处理人", on_delete=models.PROTECT, null=True, related_name="exam_question_feedback_ref_process_user")
  92. process_time = models.DateTimeField(verbose_name=u'处理时间', null=True)
  93. class Meta:
  94. db_table = "exam_question_feedback"
  95. ordering = ['-id']
  96. verbose_name = u"错误反馈"
  97. default_permissions = ()
  98. @staticmethod
  99. def getById(id):
  100. instance = ExamQuestionFeedback.objects.filter(pk=id).first()
  101. if not instance:
  102. raise CustomError(u'未找到相应的错误反馈')
  103. return instance
  104. def process(self, user):
  105. self.process_user = user
  106. self.status = ExamQuestionFeedback.PROCESSED
  107. self.process_time = timezone.now()