- import os
- import settings
- from django.db import models
- from datetime import date, datetime
- from undermythumb.renderers import ResizeRenderer, CropRenderer
- from undermythumb.fields import ImageWithThumbnailsField, ImageFallbackField
- from autoslug.fields import AutoSlugField
- def photo_path(instance, filename):
- fn, ext = os.path.splitext(filename)
- return 'festivals/%s/%s%s' % (instance.festival.slug, fn, ext)
- def edition_slug(instance):
- slug = '%s-%s' % (instance.festival.slug, instance.start.strftime('%Y'))
- return slug
- class Festival(models.Model):
- name = models.CharField(max_length=100,
- help_text="e.g. Coachella")
- display_name = models.CharField(max_length = 100,
- help_text = "Pitchfork Music Festival Chicago")
- slug = AutoSlugField(max_length=40, populate_from='name')
- def __unicode__(self):
- return self.name
- class FestivalEdition(models.Model):
- festival = models.ForeignKey(Festival, related_name='editions')
- slug = AutoSlugField(populate_from=edition_slug)
- start = models.DateField()
- end = models.DateField()
- def __unicode__(self):
- return '%s: %s' % (self.festival.display_name, self.start.strftime('%Y'))
- class Photo(models.Model):
- image = ImageWithThumbnailsField(upload_to=photo_path, thumbnails = [
- ('thumb', CropRenderer(width=151, height=151, quality=100)),
- ])
- date_taken = models.DateField()
- created_date = models.DateField(default=datetime.now)
- photographer = models.CharField(max_length=60, blank=True, null=True)
- class Meta:
- abstract = True
- def __unicode__(self):
- return '%s: %s' % (self.festival, self.date_taken.strftime('%A'))
- class PitchforkPhoto(Photo):
- festival = models.ForeignKey(FestivalEdition, related_name='pitchfork_photos')
- caption = models.CharField(max_length=140, blank=True, null=True)
- class HTCPhoto(Photo):
- festival = models.ForeignKey(FestivalEdition, related_name='htc_photos')
- from_photog = models.BooleanField(default=True,
- help_text='Leave this checked if this image was taken by a p4k photog')
- from_personality = models.BooleanField(default=False,
- help_text='Check this box if photo is from an HTC personality, like Elijah Wood')