79 lines
1.8 KiB
Python
Executable File
79 lines
1.8 KiB
Python
Executable File
from django.forms import (
|
|
Form,
|
|
ModelForm,
|
|
ModelMultipleChoiceField,
|
|
ModelChoiceField,
|
|
ChoiceField,
|
|
CharField,
|
|
)
|
|
from django.forms import inlineformset_factory
|
|
|
|
from generic.forms import ExamAuthorFormMixin, ExamFormMixin, ExamGroupsFormMixin, ExamMarkerFormMixin
|
|
|
|
from .models import (
|
|
Question,
|
|
UserAnswer,
|
|
Exam,
|
|
)
|
|
|
|
from django.contrib.admin.widgets import FilteredSelectMultiple
|
|
from django.forms.widgets import RadioSelect, TextInput, Textarea
|
|
|
|
|
|
class UserAnswerForm(ModelForm):
|
|
class Meta:
|
|
model = UserAnswer
|
|
fields = ["a", "b", "c", "d", "e"]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(UserAnswerForm, self).__init__(*args, **kwargs)
|
|
#self.fields['answer'].required = False
|
|
|
|
|
|
|
|
# This should be made generic?
|
|
class ExamForm(ExamFormMixin, ModelForm):
|
|
class Meta(ExamFormMixin.Meta):
|
|
model = Exam
|
|
|
|
class ExamAuthorForm(ExamAuthorFormMixin):
|
|
class Meta(ExamAuthorFormMixin.Meta):
|
|
model = Exam
|
|
|
|
class ExamMarkerForm(ExamMarkerFormMixin):
|
|
class Meta(ExamMarkerFormMixin.Meta):
|
|
model = Exam
|
|
|
|
|
|
class ExamGroupsForm(ExamGroupsFormMixin):
|
|
class Meta(ExamGroupsFormMixin.Meta):
|
|
model = Exam
|
|
|
|
|
|
class QuestionForm(ModelForm):
|
|
class Meta:
|
|
model = Question
|
|
fields = [
|
|
"stem",
|
|
"a",
|
|
"a_answer",
|
|
"a_feedback",
|
|
"b",
|
|
"b_answer",
|
|
"b_feedback",
|
|
"c",
|
|
"c_answer",
|
|
"c_feedback",
|
|
"d",
|
|
"d_answer",
|
|
"d_feedback",
|
|
"e",
|
|
"e_answer",
|
|
"e_feedback",
|
|
"category",
|
|
]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
# accept an optional user kwarg for parity with other apps
|
|
self.user = kwargs.pop("user", None)
|
|
super().__init__(*args, **kwargs) |