Quiz questions and answers should be translatable as they are intended for end users and are displayed in courses frontend. Some required fields are also missing. Some docstrings are cleaned. Commit linked to task ID 1941250 and PR #31272.
50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class SlideQuestion(models.Model):
|
|
_name = "slide.question"
|
|
_rec_name = "question"
|
|
_description = "Slide Quiz Question"
|
|
|
|
sequence = fields.Integer("Sequence", default=10)
|
|
question = fields.Char("Question Name", required=True, translate=True)
|
|
slide_id = fields.Many2one('slide.slide', string="Slide", required=True)
|
|
answer_ids = fields.One2many('slide.answer', 'question_id', string="Answer")
|
|
|
|
@api.constrains('answer_ids')
|
|
def _check_only_one_good_answer(self):
|
|
for question in self:
|
|
good_answer_count = 0
|
|
for answer in question.answer_ids:
|
|
if answer.is_correct:
|
|
good_answer_count += 1
|
|
if good_answer_count > 1:
|
|
raise ValidationError(_('A question can only have one good answer'))
|
|
|
|
@api.constrains('answer_ids')
|
|
def _check_correct_answer(self):
|
|
for question in self:
|
|
if not any([answer.is_correct for answer in question.answer_ids]):
|
|
raise ValidationError(_("A question must at least have one good answer"))
|
|
|
|
@api.constrains('answer_ids')
|
|
def _check_at_least_2_answers(self):
|
|
for question in self:
|
|
if len(question.answer_ids) < 2:
|
|
raise ValidationError(_("A question must at least have two possible answers"))
|
|
|
|
|
|
class SlideAnswer(models.Model):
|
|
_name = "slide.answer"
|
|
_rec_name = "text_value"
|
|
_description = "Answer for a slide question"
|
|
_order = 'question_id, id'
|
|
|
|
question_id = fields.Many2one('slide.question', string="Question", required=True)
|
|
text_value = fields.Char("Answer", required=True, translate=True)
|
|
is_correct = fields.Boolean("Is correct answer")
|