from django.db import models from django.conf import settings from django.utils.text import slugify class School(models.Model): name = models.CharField(max_length=255) slug = models.SlugField(unique=True, blank=True) description = models.TextField(blank=True) logo_url = models.URLField(blank=True, null=True, help_text="URL to the school logo") created_at = models.DateTimeField(auto_now_add=True) def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.name) super().save(*args, **kwargs) def __str__(self): return self.name class Event(models.Model): EVENT_TYPES = [ ('assembly', 'Assembly'), ('field_trip', 'Field Trip'), ('parent_teacher', 'Parent-Teacher Night'), ('sports', 'Sports Event'), ('performance', 'Performance/Arts'), ('other', 'Other'), ] school = models.ForeignKey(School, on_delete=models.CASCADE, related_name='events') title = models.CharField(max_length=255) description = models.TextField() event_type = models.CharField(max_length=50, choices=EVENT_TYPES, default='other') start_date = models.DateTimeField() end_date = models.DateTimeField() location = models.CharField(max_length=255) capacity = models.PositiveIntegerField(default=100) is_published = models.BooleanField(default=True) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.title} ({self.school.name})" class Registration(models.Model): event = models.ForeignKey(Event, on_delete=models.CASCADE, related_name='registrations') user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) registered_at = models.DateTimeField(auto_now_add=True) attended = models.BooleanField(default=False) class Meta: unique_together = ('event', 'user') def __str__(self): return f"{self.user.username} - {self.event.title}"