我來自PHP的背景,但已經給了一個Django項目來管理,我把它帶到一個運行Django 1.2.5(Python2.6)的新服務器上,並且這一切都像舊的一樣運行。我現在的任務是修復舊開發人員的錯誤。目前爲止這麼好,但我用ImageField碰到了一個絆腳石。基本上,用戶可以上傳圖片徽標(這是可行的)。然而,當無標識用戶編輯他們的細節的Django拋出一個錯誤:檢查在Django中的圖像文件的問題
ValueError: The 'org_logo' attribute has no file associated with it.
導致錯誤的代碼片段是:
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。 – JamesO 2011-04-20 14:27:11
這個伎倆!謝謝你的提示。當你想到它時很簡單。我在想,org_logo是從數據庫中以空字符串的形式提取的,但是基於此,它似乎沒有被創建或等於false? – Crispy 2011-04-20 14:37:02