2009-11-05 15 views
6

Mam następujący wzór konfigurowaniu:„getattr(): nazwa atrybutu musi być ciąg” błąd w panelu administracyjnym dla modelu z 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 

to ma do przechowywania dodatkowych informacji o użytkowniku, na przykład: awatar.

Niestety, gdy próbuję przesłać obraz poprzez panel administratora, to daje mi błąd, coś jak:

getattr(): attribute name must be string 

który nie jest produkowany, kiedy usunięcie tego pola z modelu zrobić db zresetuj i ponownie załaduj serwer. Wyobrażam sobie, że przyczyną jest ta konkretna dziedzina, tylko nie jestem pewien jak.

To mój traceback:

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 

Odpowiedz

15

Twój problem dotyczy height_field=80 i width_field=80 nie powinien zawierać żądanej wysokości i szerokości, ale raczej nazwy pól w modelu, które mogą zawierać wartości dla wysokości i szerokości.

Jak wyjaśniono w dokumentacji Django dla ImagedField są to atrybuty w modelu, które zostaną zapełnione, gdy model zostanie zapisany. Jeśli chcesz, aby ta informacja została wypełniona, utwórz atrybut modelu, w którym można przechowywać te informacje, w przeciwnym razie po prostu usuń te atrybuty, które są opcjonalne.

7

Problemem jest chyba to:

height_field=80, width_field=80 

height_field i width_field, jeśli ich użyciu, mają być nazwy pól na modelu, które zawierają informacje o wysokości i szerokości. Napraw to powinno działać.

+0

Głosowałem, dzięki. – cwj

Powiązane problemy