website/www/conservancy/apps/events/models.py

97 lines
3.4 KiB
Python
Raw Normal View History

from django.db import models
from conservancy.apps.staff.models import Person
from conservancy.apps.worldmap.models import EarthLocation
from datetime import datetime, timedelta
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"""
2015-03-03 18:40:18 +00:00
def get_queryset(self):
return super().get_queryset().filter(date__lt=datetime.today())
class FutureEventManager(models.Manager):
"""Returns all future events"""
2015-03-03 18:40:18 +00:00
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.")
2015-03-03 18:40:18 +00:00
# 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)