from django.db import models from django.utils.text import slugify from django.urls import reverse from django.contrib.auth import get_user_model User = get_user_model() from offers.models import Offer from locations.models import Location, SubLocation class Course(models.Model): user = models.ForeignKey(User, on_delete=models.PROTECT) offer = models.ForeignKey(Offer, on_delete=models.PROTECT) location = models.ForeignKey(Location, on_delete=models.PROTECT) sublocation = models.ForeignKey(SubLocation, on_delete=models.PROTECT) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) start_at = models.DateTimeField(null=True, blank=True) max_attendees = models.IntegerField(blank=False) price = models.DecimalField(max_digits=6, decimal_places=2) def __str__(self): return self.offer.name def get_absolute_url(self): return reverse('courses:show', kwargs={'id': self.id}) class Meta(): ordering = ['start_at'] class CourseUnit(models.Model): course = models.ForeignKey(Course, models.CASCADE, null=True, blank=True) start_at = models.DateTimeField(null=True, blank=False) end_at = models.DateTimeField(null=True, blank=False) def save(self, *args, **kwargs): if (self.course.start_at == None) or (self.start_at < self.course.start_at): self.course.start_at = self.start_at self.course.save() super().save(*args, **kwargs) class Meta(): ordering = ['start_at']