考虑我们有一个模型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
提交
取消