from datetime import datetime, timedelta from django.db import models from ..staff.models import Person from ..worldmap.models import EarthLocation class EventTag(models.Model): """Tagging for events (currently unused) """ label = models.CharField(max_length=100) date_created = models.DateField(auto_now_add=True) def __str__(self): return self.label class PastEventManager(models.Manager): """Returns all past events""" def get_queryset(self): return super().get_queryset().filter(date__lt=datetime.today()) class FutureEventManager(models.Manager): """Returns all future events""" def get_queryset(self): return super().get_queryset().filter(date__gte=datetime.today()) class Event(models.Model): """Model for Conservancy staff member events (presentations, etc)""" title = models.CharField(max_length=400) date = models.DateField() date_tentative = models.BooleanField(default=False) datetime = models.CharField("Date and Time", max_length=300, blank=True) slug = models.SlugField(unique_for_year='date') description = models.TextField(blank=True) people = models.ManyToManyField(Person, blank=True) location = models.CharField(max_length=1000) earth_location = models.ForeignKey( EarthLocation, null=True, blank=True, help_text="Label will not be displayed", on_delete=models.CASCADE ) tags = models.ManyToManyField(EventTag, blank=True) date_created = models.DateTimeField(auto_now_add=True) date_last_modified = models.DateTimeField(auto_now=True) class Meta: ordering = ("-date",) def __str__(self): return "{} ({})".format(self.title, self.date) def get_absolute_url(self): return "/events/{}/{}/".format(self.date.strftime("%Y"), self.slug) def day_after(self): return self.date + timedelta(days=1) # for aggregate feed pub_date = property(lambda self: self.date_created) objects = models.Manager() past = PastEventManager() future = FutureEventManager() class EventMedia(models.Model): """Media from an event includes transcripts, audio, and video pieces """ event = models.ForeignKey(Event, on_delete=models.CASCADE) format = models.CharField(max_length=1, choices=(('T', 'Transcript'), ('A', 'Audio'), ('V', 'Video'))) local = models.CharField(max_length=300, blank=True, help_text="Local filename of the resource. File should be uploaded into the static directory that corresponds to the event.") # verify_exists removed https://docs.djangoproject.com/en/1.7/releases/1.4/ remote = models.URLField(blank=True, help_text="Remote URL of the resource. Required if 'local' is not given.") novel = models.BooleanField(help_text="Is it a new piece of media or another form of an old one? If it is new it will be included in the event-media RSS feed and shown on the front page for a bit.", default=False) date_created = models.DateTimeField(auto_now_add=True) date_last_modified = models.DateTimeField(auto_now=True) class Meta: verbose_name_plural = 'event media' def __str__(self): return "{} media: {}".format(self.event, self.format)