from django.db import models from django.db.models.fields.related import ManyToManyField from ckeditor.fields import RichTextField class Category(models.Model): id = models.AutoField(primary_key=True, null=False, blank=False) name = models.CharField(max_length=200, null=False, blank=False) description = models.CharField(max_length=200, null=False, blank=False) def __str__(self): return self.name class Challenge(models.Model): id = models.AutoField(primary_key=True, null=False, blank=False) name = models.CharField(max_length=100, null=False, blank=False) short_description = models.CharField(max_length=500, null=False, blank=False) description = RichTextField(null=False, blank=False) flag = models.CharField(max_length=100, null=False, blank=False) points = models.IntegerField(null=False, blank=False) exclusive = models.BooleanField(default=False) locked = models.BooleanField(default=False) unblocked = models.BooleanField(default=False) category = models.ForeignKey(Category, null=True, blank=True, related_name='challenges', on_delete=models.SET_NULL) def __str__(self): return "{} ({})".format(self.name, self.id) class Class(models.Model): YEAR_CHOICES = (('2022', 'Seniors'), ('2023', 'Juniors'), ('2024', 'Sophomores'), ('2025', 'Freshmen')) id = models.AutoField(primary_key=True, null=False, blank=False) year = models.CharField(max_length=20, choices=YEAR_CHOICES, null=False, blank=False, unique=True) challenges_completed = models.ManyToManyField(Challenge, related_name="classes_completed", blank=True) last_updated = models.DateTimeField(auto_now=True) def __str__(self): return self.year def get_points(self): sum = 0 for c in self.challenges_completed.all(): sum += c.points return sum