ошибка "getattr (): имя атрибута должно быть строкой" в панели администратора для модели с полем 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
Он должен хранить дополнительную информацию о пользователе, например аватар.
к сожалению, когда я пытаюсь загрузить изображение через Панель администратора, это дает мне ошибку, что-то вроде:
getattr(): attribute name must be string
который не создается, когда я удаляю это поле из модели, выполните сброс БД и перезагрузите сервер. Я бы предположил, что причина в этой конкретной области, просто не уверен как.
Это мой 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
2 ответов
ваша проблема с height_field=80
и width_field=80
они должны содержать не требуемую высоту и ширину, а имена полей в модели, которые могут иметь значения для сохранения высоты и ширины в них.
как объяснено в документации Django для ImagedField это атрибуты вашей модели, которые будут заполнены для вас, когда модель будет сохранена. Если вы хотите, чтобы эта информация была заполнена для вас, создайте атрибут модели, где эта информация может храниться иначе просто удалите эти атрибуты они являются необязательными.
проблема, вероятно, в следующем:
height_field=80, width_field=80
height_field
и width_field
, Если вы их используете, должны быть именами полей в модели, которые содержат информацию о высоте и ширине. Исправьте это, это должно работать.