2010-08-27 39 views
8

Vì vậy, tôi quyết định viết lại thư viện hình ảnh của mình vì ảnh phục vụ hiệu suất cao mới. Điều đó có nghĩa là sử dụng Blobstore mà tôi chưa bao giờ sử dụng trước đây. Nó có vẻ đơn giản, đủ cho đến khi tôi cố gắng lưu trữ BlobKey trong mô hình của tôi.Lưu trữ BlobKey trong DataStore bằng công cụ ứng dụng

Làm cách nào để lưu trữ tham chiếu đến blobstorekey trong Mô hình? Tôi có nên sử dụng chuỗi hoặc tôi nên sử dụng một số tài sản đặc biệt mà tôi không biết? Tôi có mô hình này

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

Và tôi nhận được lỗi này: blobkey tài sản phải là một ví dụ str hoặc unicode, không phải là một BlobKey

Cấp, Tôi là một newbie trong công cụ ứng dụng nhưng đây là bức tường lớn đầu tiên Tôi đã nhấn chưa. Đã googled xung quanh rộng rãi mà không có bất kỳ thành công.

Trả lời

1

Thay vì một db.StringProperty(), bạn cần phải sử dụng db.blobstore.BlobReferenceProperty (tôi nghĩ)

Tôi vẫn đang cố gắng tìm điều này ra là tốt, nhưng nghĩ rằng tôi muốn đăng một số ý tưởng .

Dưới đây là các trang tài liệu tham khảo từ Google: http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html

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

+0

Tôi sẽ làm việc trên phần này so với cuối tuần ngày lao động .. đó là nếu vợ tôi không thông qua máy tính xách tay ra ngoài cửa sổ (kết hôn vào thứ bảy!). – Sologoub

11

Các công trình sau đây cho tôi. Lưu ý rằng lớp là blobstore.blobstore thay vì chỉ blobstore.

mẫu:

from google.appengine.ext.blobstore import blobstore 

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

Đặt tài sản:

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() 

Nhận tài sản:

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

Cảm ơn bạn vì điều đó. Sẽ thử điều đó. –

Các vấn đề liên quan