Hey,
I have a model for Thumbnail, but I cannot save it. It says:
AttributeError: 'Thumbnail' object has no attribute 'id'.
What is wrong?
I use django 1.0-final-SVN-unknown
thanks, Manuel
Here is an example:
>>> from portfolio.models import Photo, Thumbnail
>>> p = Photo.objects.all()[0]
>>> t = Thumbnail(p,'w300')
>>> t.save()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/manuel/Sites/mgh/django/db/models/base.py", line 307,
in save
self.save_base(force_insert=force_insert, force_update=force_update)
File "/Users/manuel/Sites/mgh/django/db/models/base.py", line 347,
in save_base
pk_val = self._get_pk_val(meta)
File "/Users/manuel/Sites/mgh/django/db/models/base.py", line 288,
in _get_pk_val
return getattr(self, meta.pk.attname)
AttributeError: 'Thumbnail' object has no attribute 'id'
The models:
from django.db import models
from django.utils.translation import ugettext as _
import Image as PilImage
import ekin.settings as s
import os
# Create your models here.
class Galery(models.Model):
title = models.CharField(_("Name"), max_length=200)
class Photo(models.Model):
picture = models.ImageField(null=True, upload_to='./images/')
caption = models.CharField(_("Optional
caption"),max_length=100,null=True, blank=True)
item = models.ForeignKey(Galery)
def get_thumbnail_url(self, string):
return Thumbnail(self, string).get_thumbnail()
def __unicode__(self):
return unicode(self.picture)
class Thumbnail(models.Model):
miniature_url = models.CharField(max_length=100)
item = models.ForeignKey(Photo)
x,y = None, None
def __init__(self, item, dimensions):
self.dimensions = dimensions
self.item = item
self.__process()
self.__make_thumbnail()
def __unicode__(self):
return "Thumbnail %s of %s" %(self.dimensions , self.item)
def get_thumbnail(self):
# if the image wasn't already resized, resize it
if not os.path.exists(self.miniature_filename) :#or
os.stat(miniature_filename).st_ctime < os.stat(filename).st_ctime:
self.__make_thumbnail()
return self.miniature_url
def __process(self):
x,y=None,None
if 'x' in self.dimensions:
x, y = [int(x) for x in self.dimensions.split('x')]
elif 'w' in self.dimensions:
x = int(self.dimensions[1:])
elif 'h' in self.dimensions:
y = int(self.dimensions[1:])
self.size = [x,y]
# defining the filename and the miniature filename
basename, format = self.item.picture.name.rsplit('.', 1)
miniature_folder = os.path.join(s.MEDIA_ROOT, basename+'/')
if not os.path.exists(miniature_folder):
os.mkdir(miniature_folder)
miniature = basename + '/' +self.dimensions.replace(' ','') +
'.' + format
self.miniature_filename = os.path.join(s.MEDIA_ROOT, miniature)
self.miniature_url = os.path.join(s.MEDIA_URL, miniature)
self.filename =
os.path.join(s.MEDIA_ROOT,self.item.picture.name)
def __make_thumbnail(self):
if os.path.exists(self.miniature_filename):
os.remove(self.miniature_filename)
image = PilImage.open(self.filename)
old_image_size=image.size
if not self.x or not self.y:
self.x, self.y = image.size
if not self.size[1]:
self.size[1]=int(self.y*(float(self.size[0])/self.x))
elif not self.size[0]:
self.size[0]=int(self.x*(float(self.size[1])/self.y))
image.thumbnail([self.size[0],self.size[1]],PilImage.ANTIALIAS)
image.save(self.miniature_filename, image.format)
and the db looks good:
CREATE TABLE `portfolio_thumbnail` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`miniature_url` varchar(100) NOT NULL,
`item_id` integer NOT NULL
)
;
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---