2011-06-07 237 views
3

使用'Photologue',我可以將圖像作爲表單的一部分上傳沒有問題。然而,在測試計劃中,我無法獲取圖像進行驗證。Django - 測試上傳圖像

在tests.py:

data_photo = {'competition': self.newcomp, 
        'title': 'Rabbit', 
        'image': open('photocompetitions/static/img/body_bg.jpg'), 
        'flickr_id': '425258', 
        'description': 'A picture of a rabbit', 
        'location': 'POINT (5000 5000)', 
        'location_description': 'Just some random place', 
        'copyright': 'Copyright 2011'} 
photoform = PhotoForm(data_photo) 

一切正常,除非是因爲其未通過「圖像」字段「則需要此字段」。消息,所以我假設它不被收到,儘管open()命令。 「圖片」字段是photologue的ImageModel模型,並以網站上的標準上傳形式出現。

+0

爲什麼像場是一個模型,但不是*的ImageField *?你確定你的表單處理參數'data_photo'的構造函數嗎?你爲什麼試圖在服務器'body_dg.jpg'上打開文件? – sergzach 2011-06-07 10:17:41

+0

你是什麼意思?上面這個表單示例中的'image'字段是ImageField的photologue應用程序中ImageModel的一部分。 – Jamie 2011-06-07 10:53:47

回答

0

您是否嘗試使用bmp而不是jpg?

我記得django測試框架加載PIL的方式存在問題。

在這種情況下jpg格式可能無法正確啓用,但bmp應該沒問題。

我希望它能幫助

6

你要通過圖像不data,但在形式的files參數。

from django.core.files.uploadedfile import SimpleUploadedFile 

img = open('photocompetitions/static/img/body_bg.jpg') 
uploaded = SimpleUploadedFile(img.name, img.read()) 
photoform = PhotoForm(data_photo, files={'image': uploaded}) 
2

您需要使用開放文件 'RB' 選項:

'image': open('photocompetitions/static/img/body_bg.jpg', 'rb') 
+0

這在Django 1.6.X中不起作用,它爲您工作的版本是什麼? – radtek 2014-10-08 01:30:30