猿问

如何从 Django 中的 BinaryField 获取字节?

考虑我们有一个模型BinaryField:


from django.db import models

import hashlib


class 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'


那么我做错了什么?


函数式编程
浏览 339回答 2
2回答

慕丝7291255

所以这里的结论是:BinaryField可以分配字节,也可以作为字节读取。在上面的代码中,散列是错误的,正确的方法是:hashlib.md5(self.image).hexdigest()

POPMUISE

关于您关于 的更新AttributeError,您hexdigest()错误地调用了该方法。问题是,update()方法返回None,和你几乎试图调用hexdigest()上None。像这样的链接方法调用仅在前一个方法返回实际对象而不是None.您必须分多个步骤执行此调用:def __str__(self):&nbsp; &nbsp; m = hashlib.md5()&nbsp; &nbsp; m.update(self.image)&nbsp; &nbsp; return m.hexdigest()
随时随地看视频慕课网APP

相关分类

Python
我要回答