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 django-users@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to