2011-10-31 30 views
0

我使用此代码更新现有实体的模式:GAE:BadValueError同时更新现有实体的模式

  photo = Photo.get_by_id(334) 
      photo.smThumb = db.BlobProperty() 
      photo.mThumb = db.BlobProperty() 
      photo.lgThumb = db.BlobProperty() 
      photo.put() 

      photo.smThumb = photo.sm_thumbnail 
      photo.mThumb = photo.lg_thumbnail 
      photo.lgThumb = photo.lg_thumbnail 
      photo.put() 

导致:

BadValueError: Property smThumb must be convertible to a Blob instance (Blob() argument  should be str instance, not BlobProperty) 

我该如何解决这个问题?

note: sm_thumbnail和lg_thumbnail都是db.BlobProperty()类型,当前有二进制值(每个都有一张照片)。我试图将这些值复制到新的属性smThumb,mThumb和lgThumb中。

+0

@ user589983同样的错误 – zakdances

回答

0

编辑:重写。

当您访问对象BlobProperty字段时,如果该字段未初始化且对象尚未保存,则会出现相同的错误。如果该字段包含任何内容(甚至是空字符串),则它将是Blob类型。也许你的问题与此有关。

最初出现的答案是here

+0

不正确 - 一个BlobProperty将永远不会返回它自己。 –

+0

@NickJohnson添加了源文件,认为它是可靠的,并且在那种情况下工作。 – Lycha

+0

这篇文章只是描述属性如何工作 - 即使你没有初始化它,它也不会返回属性类。 –

0

你不向我们展示你的模型,但我猜它看起来是这样的:

class Photo(db.Model): 
    sm_thumbnail = db.BlobProperty 
    # ... 

    smThumb = db.BlobProperty() 

注意对sm_thumbnail定义缺少的括号。如果没有它们,你不会让sm_thumbnail成为BlobProperty的一个实例,而是让它成为BlobProperty类的别名。添加缺少的parens,你应该没问题。

相关问题