Source code for oioioi.disqualification.models
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.core.validators import MaxLengthValidator
from django.db import models
from django.utils.translation import gettext_lazy as _
from oioioi.base.utils.validators import validate_whitespaces
from oioioi.contests.models import Contest, Submission
[docs]class Disqualification(models.Model):
# Leave submission empty to make contest-wide disqualification
[docs] submission = models.ForeignKey(
Submission,
null=True,
blank=True,
verbose_name=_("submission"),
on_delete=models.CASCADE,
)
[docs] title = models.CharField(
max_length=255,
validators=[MaxLengthValidator(255), validate_whitespaces],
verbose_name=_("title"),
)
[docs] def clean(self):
if self.submission and self.submission.user != self.user:
raise ValidationError(_("The submission does not match the user."))
[docs] def save(self, *args, **kwargs):
if self.submission:
assert self.contest.id == self.submission.problem_instance.contest_id
assert self.user.id == self.submission.user_id
super(Disqualification, self).save(*args, **kwargs)