Subiendo una imagen a través de Admin en Django

Estoy intentando subir una imagen a través del Panel de administración de Django. Me estoy ejecutando en Google App Engine y estoy usando el complemento de transferencia de archivos (no estoy seguro si alguno de los dos es relevante para el problema que tengo).

Desde mi modelys.py:

from django.db import models # Create your models here. class CarouselItem (models.Model): caption = models.CharField(max_length=200,blank=True) order = models.IntegerField() carousel_image = models.ImageField(upload_to='uploads/carousel_image/%Y/%m/%d/') def __unicode__(self): return self.caption 

Desde admin.py:

 from carousel.models import CarouselItem from django.contrib import admin from imperavi.admin import ImperaviAdmin class carouselAdmin(ImperaviAdmin): list_display = ('caption','order') admin.site.register(CarouselItem, carouselAdmin) 

El error que recibo es “No hay módulo llamado Imagen”. No tengo instalado PIL ¿Necesito instalarlo para habilitar esta funcionalidad?

Actualización: aquí está el rastreo que causó el error:

 Environment: Request Method: POST Request URL: http://127.0.0.1:8000/admin/carousel/carouselitem/add/ Django Version: 1.3.1 Python Version: 2.7.2 Installed Applications: ['django.contrib.admin', 'django.contrib.contenttypes', 'django.contrib.auth', 'django.contrib.sessions', 'djangotoolbox', 'autoload', 'dbindexer', 'django.contrib.staticfiles', 'portfolio', 'EBoardMembers', 'Calendar', 'filetransfers', 'positions', 'imperavi', 'chunks', 'carousel', 'djangoappengine'] Installed Middleware: ('autoload.middleware.AutoloadMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware') Traceback: File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/core/handlers/base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/contrib/admin/options.py" in wrapper 307. return self.admin_site.admin_view(view)(*args, **kwargs) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/utils/decorators.py" in _wrapped_view 93. response = view_func(request, *args, **kwargs) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/views/decorators/cache.py" in _wrapped_view_func 79. response = view_func(request, *args, **kwargs) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/contrib/admin/sites.py" in inner 197. return view(request, *args, **kwargs) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/utils/decorators.py" in _wrapper 28. return bound_func(*args, **kwargs) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/utils/decorators.py" in _wrapped_view 93. response = view_func(request, *args, **kwargs) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/utils/decorators.py" in bound_func 24. return func(self, *args2, **kwargs2) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/db/transaction.py" in inner 217. res = func(*args, **kwargs) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/contrib/admin/options.py" in add_view 864. if form.is_valid(): File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/forms/forms.py" in is_valid 121. return self.is_bound and not bool(self.errors) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/forms/forms.py" in _get_errors 112. self.full_clean() File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/forms/forms.py" in full_clean 267. self._clean_fields() File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/forms/forms.py" in _clean_fields 282. value = field.clean(value, initial) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/forms/fields.py" in clean 503. return super(FileField, self).clean(data) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/forms/fields.py" in clean 163. value = self.to_python(value) File "/Users/Zach/Documents/Cornell/Activities/MICC/new_website/MICC_app_engine/django/forms/fields.py" in to_python 528. import Image Exception Type: ImportError at /admin/carousel/carouselitem/add/ Exception Value: No module named Image 

Necesitas instalar PIL o equivalente. Almohada en caso de python 3.x. Si tienes problemas para instalarlo, solo tienes que decirlo, tengo algunos y es fácil de solucionar, solo tienes que agregar la ruta a tu python.h. Tal vez esto esté arreglado ahora … No hay nada que agregar en models.py

Enlazar

Sí, necesitas instalar Pil. Pero antes necesita instalar jpeglib en su servidor (sin este PIL no puede trabajar con archivos jpeg)

Alterall, puedes incluir

 from django.db.models import ImageField 

en tus modelos.py