我做一小片的使用Django和JS將處理圖片上傳軟件。到現在爲止還挺好。我從dropzone.js通過AJAX獲得漂亮的小圖片。它們保存在文件系統中,並在我的Photo模型中有一個ImageField,用於跟蹤存儲的內容和位置。獲取的ImageField文件路徑post_delete
我甚至捅dropzone.js很好地詢問我的dev的服務器刪除數據庫條目和文件本身。我發現後者缺乏一點。於是我開始編寫一個函數,捕獲來自我的Photo模型的post_delete信號,並負責處理文件系統中的刪除操作。問題是,我似乎無法找到一種方式來獲取存儲在數據庫中的文件路徑。
如果我理解正確的話,下面應該工作:
from django.db import models
from django.db.models.signals import post_delete
from django.dispatch import receiver
class Photo(models.Model):
imageFile = models.ImageField(upload_to=generateImageFileNameAndPath)
@receiver(post_delete, sender=Photo)
def cleanupImageFiles(sender, **kwargs):
print("Cleanup called")
p = kwargs['instance']
path = p.imageFile.name
print(path)
但是,當我試圖輸出path
到控制檯,沒有什麼。
很抱歉的upperCasing而不是使用under_scores作爲似乎是Python的約定。我個人覺得下劃線會議有點煩人,我正在腦海裏摔跤比賽,不管是按照慣例還是走自己的路。現在,我已經完成了後者。
編輯:我似乎無法使其與p.imageFile.url
一起使用,建議here。
editedit:我也試圖與pre_delete信號想,也許post_delete數據已經被炸成碎片,這將是愚蠢的,但誰知道:)
EDIT3:調用imageFile.path,不減產它也是。它只是在控制檯窗口上生成
[27/Nov/2016 22:29:08] "POST /correcturl/upload/ HTTP/1.1" 200
Cleanup called
[27/Nov/2016 22:29:15] "DELETE /correcturl/upload/ HTTP/1.1" 500 37
。 HTTP錯誤500只是來自視圖無法處理刪除調用,因爲此代碼無法正常工作。這就是我現在在前端用作狀態消息的前端。 這可能是值得一提的是,如果我做
print(p)
控制檯上的輸出
Photo object
不起作用。見編輯號碼3. – xtrom0rt
@ xtrom0rt嗯......有趣。試穿後讓我回復你。 – xyres
是的,這很奇怪。如果我執行instance.pk,它會爲該行提供正確的主鍵,所以我們應該在對象實例上有一個體面的句柄。然而它表現奇怪。 – xtrom0rt