【问题标题】:'getattr(): attribute name must be string' error in admin panel for a model with an ImageField带有 ImageField 的模型在管理面板中出现“getattr():属性名称必须是字符串”错误
【发布时间】:2009-11-05 20:27:17
【问题描述】:

我设置了以下模型:

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

当我从模型中删除该字段时不会产生该字段,执行数据库重置并重新加载服务器。我想原因是这个特定的领域,只是不确定如何。

这是我的回溯:

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

【问题讨论】:

    标签: python django django-models django-admin


    【解决方案1】:

    您的问题在于 height_field=80width_field=80 这些不应包含您需要的高度和宽度,而是模型中可以保存高度和宽度值的字段名称。

    正如ImagedField 的 Django 文档中所述,这些是模型上的属性,在保存模型时将为您填充。如果您希望为您填充此信息,请创建可以存储此信息的模型属性,否则只需删除这些属性,它们是可选的。

    【讨论】:

      【解决方案2】:

      问题大概是这样的:

      height_field=80, width_field=80
      

      height_fieldwidth_field,如果你使用它们,应该是模型上包含高度和宽度信息的字段的名称。修复它应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 2021-11-23
        • 1970-01-01
        • 2020-05-26
        • 2021-11-08
        • 1970-01-01
        • 2021-08-31
        相关资源
        最近更新 更多