2009-11-05 15 views
6

he puesto el siguiente modelo arriba:'getattr(): Nombre del atributo debe ser una cadena' error en el panel de administración para un modelo con un ImageField

class UserProfile(models.Model): 
    "Additional attributes for users." 
    url = models.URLField() 
    location = models.CharField(max_length=100) 
    user = models.ForeignKey(User, unique=True) 
    avatar = models.ImageField(upload_to='/home/something/www/avatars', height_field=80, width_field=80) 

    def __unicode__(self): 
     return "Profile of " + self.user.username 

Se supone que almacenar información sobre un usuario, por ejemplo, avatar.

Por desgracia, cuando intento subir una imagen a través del panel de administración, me da un error, algo así como:

getattr(): attribute name must be string 

que no se produce cuando quito ese campo a partir del modelo, hacer una base de datos restablecer y volver a cargar el servidor. Me imagino que la causa es este campo en particular, simplemente no estoy seguro de cómo.

Esta es mi rastreo:

File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py" in get_response 
    92.     response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/lib/pymodules/python2.6/django/contrib/admin/options.py" in wrapper 
    226.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/usr/lib/pymodules/python2.6/django/views/decorators/cache.py" in _wrapped_view_func 
    44.   response = view_func(request, *args, **kwargs) 
File "/usr/lib/pymodules/python2.6/django/contrib/admin/sites.py" in inner 
    186.    return view(request, *args, **kwargs) 
File "/usr/lib/pymodules/python2.6/django/db/transaction.py" in _commit_on_success 
    240.     res = func(*args, **kw) 
File "/usr/lib/pymodules/python2.6/django/contrib/admin/options.py" in add_view 
    718.     new_object = self.save_form(request, form, change=False) 
File "/usr/lib/pymodules/python2.6/django/contrib/admin/options.py" in save_form 
    551.   return form.save(commit=False) 
File "/usr/lib/pymodules/python2.6/django/forms/models.py" in save 
    407.        fail_message, commit, exclude=self._meta.exclude) 
File "/usr/lib/pymodules/python2.6/django/forms/models.py" in save_instance 
    65.   f.save_form_data(instance, cleaned_data[f.name]) 
File "/usr/lib/pymodules/python2.6/django/db/models/fields/files.py" in save_form_data 
    283.    setattr(instance, self.name, data) 
File "/usr/lib/pymodules/python2.6/django/db/models/fields/files.py" in __set__ 
    316.    self.field.update_dimension_fields(instance, force=True) 
File "/usr/lib/pymodules/python2.6/django/db/models/fields/files.py" in update_dimension_fields 
    368.    (self.width_field and not getattr(instance, self.width_field)) 

Exception Type: TypeError at /admin/proj/userprofile/add/ 
Exception Value: getattr(): attribute name must be string 

Respuesta

15

Su problema es con height_field=80 y width_field=80 estos no deben contener el alto y el ancho que necesita, sino los nombres de los campos en su modelo que pueden guardar los valores de alto y ancho en ellos.

Según se explica en la documentación de Django para el ImagedField, estos son atributos en su modelo que se completarán cuando el modelo se guarde. Si desea que esta información se rellene para usted el atributo de modelo de creación donde esta información puede almacenarse, de lo contrario simplemente elimine estos atributos, son opcionales.

7

El problema es probablemente la siguiente:

height_field=80, width_field=80 

height_field y width_field, si se utilizan, se supone que son los nombres de los campos en el modelo que contienen la información de alto y ancho Arregle esto debería funcionar.

+0

Te he votado, gracias. – cwj

Cuestiones relacionadas