尝试将字符串属性设置为模型另一部分的md5默认值

1 投票
1 回答
724 浏览
提问于 2025-04-17 02:18

我想做的是,在把图片存储到数据库的时候,顺便记录下这张图片的md5值,以便以后在输出这张图片的时候使用。我觉得这可能是个简单的错误,我现在就是看不出来。

代码片段:

import hashlib

from google.appengine.api import urlfetch
from google.appengine.ext import db

def getimg(url):
    result = urlfetch.fetch(url)
    if result.status_code == 200:
        return result.content
    else:
        return None

class ImageBlobs(db.Model):
    img = db.BlobProperty(default=None)
    last_update = db.DateTimeProperty(auto_now=True)
    etag = db.StringProperty(default=hashlib.md5(img).hexdigest())

img = ImageBlobs(img=getimg('http://www.a-real-domain.com/a-working-image.png'))
img.put()

错误信息:

TypeError: must be convertible to a buffer, not BlobProperty

有什么想法或者建议可以帮我解决这个小问题吗?

1 个回答

1

默认值不是这样工作的。你需要一个 派生属性

@DerivedProperty
def etag(self):
  return hashlib.md5(self.img).hexdigest()

撰写回答