考慮我們有一個模型BinaryField:from django.db import modelsimport hashlibclass Target(models.Model): # ... image = models.BinaryField(max_length=(1<<24)-1) # ... def __str__(self): return hashlib.md5().update(self.image).hexdigest()上面的代碼是否正確計算了圖像的 MD5 摘要?或者里面是否有一些方法或變量BinaryField來獲取傳遞給update()方法的內存?更新:當我嘗試:>>> from pathlib import Path>>> t = Target(image=Path('../../Experiments/LoginError2.jpg').read_bytes())>>> t我收到以下錯誤:AttributeError: 'NoneType' object has no attribute 'hexdigest'那么我做錯了什么?
2 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
所以這里的結論是:BinaryField
可以分配字節,也可以作為字節讀取。
在上面的代碼中,散列是錯誤的,正確的方法是:
hashlib.md5(self.image).hexdigest()

POPMUISE
TA貢獻1765條經驗 獲得超5個贊
關于您關于 的更新AttributeError,您hexdigest()錯誤地調用了該方法。
問題是,update()方法返回None,和你幾乎試圖調用hexdigest()上None。像這樣的鏈接方法調用僅在前一個方法返回實際對象而不是None.
您必須分多個步驟執行此調用:
def __str__(self):
m = hashlib.md5()
m.update(self.image)
return m.hexdigest()
添加回答
舉報
0/150
提交
取消