mirror of
https://github.com/etnguyen03/tjdests.git
synced 2025-04-21 02:00:16 -04:00
feat: validate test scores
This commit is contained in:
parent
b4bdb01a1e
commit
cc5c9f22e5
|
@ -1,10 +1,12 @@
|
|||
from typing import Dict, Any
|
||||
|
||||
from crispy_forms.helper import FormHelper
|
||||
from crispy_forms.layout import Submit
|
||||
|
||||
from django import forms
|
||||
|
||||
from tjdests.apps.authentication.models import User
|
||||
from tjdests.apps.destinations.models import Decision
|
||||
from tjdests.apps.destinations.models import Decision, TestScore
|
||||
|
||||
|
||||
class ProfilePublishForm(forms.ModelForm):
|
||||
|
@ -33,3 +35,37 @@ class DecisionForm(forms.ModelForm):
|
|||
class Meta:
|
||||
model = Decision
|
||||
fields = ["college", "decision_type", "admission_status"]
|
||||
|
||||
|
||||
class TestScoreForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = TestScore
|
||||
fields = ["exam_type", "exam_score"]
|
||||
|
||||
def clean(self) -> Dict[str, Any]:
|
||||
cleaned_data = super().clean()
|
||||
|
||||
exam_score = int(cleaned_data.get("exam_score"))
|
||||
|
||||
# ACT is 1-36
|
||||
if cleaned_data.get("exam_type").startswith("ACT_"):
|
||||
if not 1 <= exam_score <= 36:
|
||||
self.add_error("exam_score", "This is not a valid ACT exam score")
|
||||
|
||||
# SAT2 and SAT EBRW/Math sections are 200-800 and mod 10
|
||||
elif cleaned_data.get("exam_type").startswith("SAT2_") or cleaned_data.get("exam_type") in ["SAT_EBRW", "SAT_MATH"]:
|
||||
if not 200 <= exam_score <= 800 or not exam_score % 10 == 0:
|
||||
self.add_error("exam_score", "This is not a valid SAT section exam score")
|
||||
|
||||
# SAT total is 400-1600 mod 10
|
||||
elif cleaned_data.get("exam_type") == "SAT_TOTAL":
|
||||
if not 400 <= exam_score <= 1600 or not exam_score % 10 == 0:
|
||||
self.add_error("exam_score", "This is not a valid SAT exam score")
|
||||
|
||||
# AP is 1-5
|
||||
if cleaned_data.get("exam_type").startswith("AP_"):
|
||||
if not 1 <= exam_score <= 36:
|
||||
self.add_error("exam_score", "This is not a valid AP exam score")
|
||||
|
||||
return cleaned_data
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.views.generic import CreateView, DeleteView, UpdateView
|
|||
from tjdests.apps.authentication.decorators import require_accept_tos
|
||||
from tjdests.apps.destinations.models import Decision, TestScore
|
||||
|
||||
from .forms import ProfilePublishForm
|
||||
from .forms import ProfilePublishForm, TestScoreForm
|
||||
|
||||
|
||||
@login_required
|
||||
|
@ -43,7 +43,7 @@ class TestScoreCreateView(
|
|||
LoginRequiredMixin, SuccessMessageMixin, UserPassesTestMixin, CreateView
|
||||
):
|
||||
model = TestScore
|
||||
fields = ["exam_type", "exam_score"]
|
||||
form_class = TestScoreForm
|
||||
template_name = "profile/testscore_form.html"
|
||||
success_message = "Test score created successfully."
|
||||
|
||||
|
@ -62,7 +62,7 @@ class TestScoreUpdateView(
|
|||
LoginRequiredMixin, SuccessMessageMixin, UserPassesTestMixin, UpdateView
|
||||
):
|
||||
model = TestScore
|
||||
fields = ["exam_type", "exam_score"]
|
||||
form_class = TestScoreForm
|
||||
template_name = "profile/testscore_form.html"
|
||||
success_message = "Test score updated successfully."
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user