2011-10-31 31 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,你應該沒問題。

相關問題