【发布时间】:2011-04-20 14:15:14
【问题描述】:
我来自 PHP 背景,但被分配了一个 Django 项目来管理,我把它带到了一个运行 Django 1.2.5 (Python2.6) 的新服务器上,并让它像在旧的。我现在的任务是修复旧开发人员的错误。到目前为止一切顺利,但我遇到了 ImageField 的绊脚石。本质上,用户可以上传图像徽标(这可行)。但是,当没有徽标的用户编辑他们的详细信息时,Django 会抛出错误:
ValueError: The 'org_logo' attribute has no file associated with it.
导致错误的代码sn-p是:
user = request.user
org = user.organisation
if not checkLogoFile(org):
org.org_logo = ''
org.save()
函数 checkLogoFile 如下所示:
def checkLogoFile(org):
from os.path import exists
path = org.org_logo.path
if path:
file_name = path.split('/')[-1]
return exists(settings.MEDIA_ROOT+'logo/'+file_name)
return False
按照我的理解,如果 checkLogoFile 返回 false 那么 org_logo 值将是一个零长度字符串。如果 org_logo 包含路径,则返回该路径。如前所述,当图像标志不存在时,这会失败,但如果有图像标志则有效。 :-/
任何指针都会非常有帮助,因为我已经搜索了 Google,但到目前为止还没有得到任何结果。
【问题讨论】:
-
在 checkLogoFile 中,尝试在设置路径之前检查是否 org.org_logo:。 checkLogoFile 代码只是检查文件是否在服务器上,而不是在表中,因此它仍在尝试使用 org.org_logo.path。
-
成功了!谢谢你的提示。想想就很简单。我在想 org_logo 是作为空字符串从数据库中提取出来的,但基于此,它似乎没有被创建或等于 false?