import datetime from PIL import Image from django.contrib.gis.db import models from django.conf import settings from blog.models import Entry from photos.models import PhotoGallery from locations.models import State def get_upload_path(self, filename): return "images/projects/np/%s/%s" % (datetime.datetime.today().strftime("%Y"), filename) class NationalParks(models.Model): type = models.CharField(max_length=50) name = models.CharField(max_length=254) state = models.ForeignKey(State, null=True) size = models.CharField(max_length=10, null=True) fee = models.CharField(max_length=5, null=True) camping_fee = models.CharField(max_length=10, null=True) url = models.CharField(max_length=250, null=True) code = models.CharField(max_length=16) unit_name = models.CharField(max_length=254) date_visited_begin = models.DateField('Date Visited', null=True) date_visited_end = models.DateField('Date Visited', null=True) date_park_created = models.DateField('Date Park Created', null=True) zoom = models.IntegerField(null=True) mpoly = models.MultiPolygonField(null=True) visited = models.BooleanField(default=False) dek = models.TextField(null=True, blank=True) tag_line = models.CharField(max_length=254, null=True) post = models.ForeignKey(Entry, null=True) gallery = models.ForeignKey(PhotoGallery, blank=True, null=True, verbose_name='photo set') image = models.FileField(upload_to=get_upload_path, null=True, blank=True, help_text="width: 980px, height: > 450px") image_height = models.CharField(max_length=20, null=True, blank=True) image_width = models.CharField(max_length=20, null=True, blank=True) objects = models.GeoManager() class Meta: verbose_name_plural = "National Parks" app_label = 'projects' ordering = ('-visited', 'unit_name',) def __str__(self): return self.unit_name @property def get_image_url(self): return "%s%s" % (settings.IMAGES_URL, self.image.name[7:]) def save(self): #get image dimensions img = Image.open(self.image) self.image_width, self.image_height = img.size super(NationalParks, self).save()