我尝试实现此功能沿着用户选择问题是否是带有选项的多项选择题、带有答案字段的简答题干以及图像视频问题(其中干可以是带有字段的图像)的能力。
到目前为止:
class Question(models.Model):
QUESTION_TYPE_CHOICES = [
('MCQ', 'MultipleChoiceQuestion'),
('SAQ', 'ShortAnswerQuestion'),
('IVQ', 'ImageVideoQuestion'),
]
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
paper = models.ForeignKey(Paper, on_delete=models.CASCADE, null=True)
question_type = models.CharField(max_length=200,choices=QUESTION_TYPE_CHOICES, null=True) # MultipleChoiceQuestion, ShortAnswerQuestion, EssayQuestion, ImageVideoQuestion
question_text = models.CharField(max_length=200)
def __str__(self):
return self.question_text
class Meta:
abstract = True
class MultipleChoiceQuestion(Question):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
paper = models.ForeignKey(Paper, on_delete=models.CASCADE, null=True)
# multiple_choice_question_text = models.CharField(max_length=200)
multiple_choice_option_text = models.CharField(max_length=200, default=None)
def __str__(self):
return self.question_text
class MultipleChoiceOption(models.Model):
multiple_choice_question = models.ForeignKey(MultipleChoiceQuestion, on_delete=models.CASCADE, null=True)
multiple_choice_option_text = models.CharField(max_length=200, default=None)
is_correct = models.BooleanField(default=False)
def __str__(self):
return self.multiple_choice_option_text
# applies to short answer questions and essays
class ShortAnswerQuestion(Question):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
paper = models.ForeignKey(Paper, on_delete=models.CASCADE, null=True)
# short_answer_question_text = models.TextField() # Text of the question
answer_text = models.TextField() # Answer to the question
discussion = models.TextField(blank=True) # Discussion or additional information about the question (optional)
def __str__(self):
return self.question_text
# applies to OSCEs, POTS or other question with an image, or a video within the stem
class ImageVideoQuestion(Question):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
paper = models.ForeignKey(Paper, on_delete=models.CASCADE, null=True)
# image_video_question_text = models.TextField() # Text of the question
answer_text = models.TextField() # Answer to the question
discussion = models.TextField(blank=True) # Discussion or additional information about the question (optional)
def __str__(self):
return self.question_text
字符串
这三种类型的问题继承了基类Question类,该基类具有供参与者输入问题 Backbone.js 的字段。最好的解决办法是什么?
当贡献者想要添加问题时,他们应该能够选择问题的类型,并且相应的字段会自动显示。例如,选择MCQ应该会导致他们看到选项字段,他们可以在其中添加它们,并在保存之前突出显示哪个选项是正确的。如果他们选择SAQ,则向他们显示一个答案字段以插入答案。
1条答案
按热度按时间nsc4cvqm1#
首先,我必须提到,这是一个示例代码,应该为你工作,但你必须更新它的基础上,你的项目,使它工作顺利,我想向你展示的过程。
首先,您必须为每个问题创建ModelForm:
字符串
然后创建一个表单,用户可以选择问题类型,然后向用户显示该表单:
型
你必须在代码中添加一个JS脚本,让用户在表单之间切换:
型
然后,您可以在视图中这样处理表单提交:
型