2010-08-27 54 views
8

因此,我決定改寫我的圖片庫,因爲它有新的高性能圖片服務。這意味着使用我以前從未使用過的Blobstore。這似乎很簡單,直到我試圖將BlobKey存儲在我的模型中。在應用程序引擎中將BlobKey存儲到DataStore中

我該如何在模型中存儲對blobstorekey的引用?我應該使用字符串還是應該使用一些我不知道的特殊屬性?我有這個模型

class Photo(db.Model): 
date = db.DateTimeProperty(auto_now_add=True) 
title = db.StringProperty() 
blobkey = db.StringProperty() 
photoalbum = db.ReferenceProperty(PhotoAlbum, collection_name='photos') 

而且我得到這個錯誤:房產的BlobKey必須是海峽或Unicode實例,而不是一類BlobKey

當然,我在應用程序引擎是一個新手,但是這是第一個大牆我已經打了。 已經廣泛搜索沒有任何成功。

回答

1

取而代之的是db.StringProperty的(),你需要使用db.blobstore.BlobReferenceProperty(我認爲)

我仍然在試圖弄清楚這件事情出來爲好,但想到我會發布一些想法。

以下是參考頁從谷歌: http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html

http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#BlobReferenceProperty

+0

我要在這部分在勞動節週末工作..這就是說,如果我的妻子沒有通過窗外的筆記本電腦(星期六結婚!)。 – Sologoub 2010-08-30 15:17:02

11

我下面的作品。請注意,該類是blobstore.blobstore,而不僅僅是blobstore。

型號:

from google.appengine.ext.blobstore import blobstore 

class Photo(db.Model): 
    imageblob = blobstore.BlobReferenceProperty() 

設置屬性:

from google.appengine.api import images 
from google.appengine.api import blobstore 
from google.appengine.ext.webapp import blobstore_handlers 

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler): 
    def post(self): 
    upload_files = self.get_uploads('file') # 'file' is file upload field in the form 
    blob_info = upload_files[0] 
    entity = models.db.get(self.request.get('id')) 
    entity.imageblob = blob_info.key() 

取得屬性:

image_url = images.get_serving_url(str(photo.imageblob.key())) 
+0

謝謝你那位先生。將嘗試一下。 – 2010-09-06 15:27:40

相關問題