django'InMemoryUploadedFile'对象没有属性'field'

时间:2011-09-04 21:10:55

标签: django apache file-upload nginx mod-wsgi

我在生产服务器上上传文件时遇到问题。我在模型上使用django-stdimage如下:

class League(models.Model):
    name = models.CharField(max_length=100)
    logo = StdImageField(upload_to='images/league_logos', blank=True, size=(220, 120))

使用管理员应用程序,我可以在我的本地计算机上(使用开发服务器)上传模板就好了。在制作时,我有静态文件检索的nginx和其余的mod_wsgi的apache。在尝试上传产品时,我得到了

'InMemoryUploadedFile'对象没有属性'field'

错误。我在apache中拖尾错误日志,当我尝试上传时似乎没有发生任何事情。错误发生在

site-packages / django / contrib / admin / templates / admin / includes / fieldset.html,第19行的错误

这只是访问field.field的模板标记:

{{ field.field }}

我不知道如何调试这个。有什么建议吗?

由于

2 个答案:

答案 0 :(得分:0)

我发现由于PIL在安装我的要求时没有安装。这是一个非常令人沮丧的问题,因为错误信息并没有真正让我知道这一点。

幸运的是,我遇到了这个帖子:

Why can't I upload jpg files to my Django app via admin/?

让我陷入困境。

答案 1 :(得分:0)

您可能希望将其传递给文件系统存储对象 - 然后它知道如何将从浏览器获取的InMemoryUploadedFile对象转换为ImageFieldFile,以便它可以保存图像。

# Near top of your file:
from django.core.files.storage import FileSystemStorage

fs = FileSystemStorage(location=settings.MEDIA_ROOT)

# Then in your model:
    logo = StdImageField(storage = fs, upload_to='images/league_logos', blank=True, size=(220, 120))

这应该将上传的文件保存到MEDIA_ROOT / images / league_logos。