2010-08-27 11 views
8

Así que decidí reescribir mi galería de imágenes debido a la nueva característica de servicio de imágenes de alto rendimiento. Eso significaba usar Blobstore que nunca antes había usado. Parecía bastante simple hasta que traté de almacenar la BlobKey en mi modelo.Almacenamiento de BlobKey en DataStore con el motor de aplicación

¿Cómo puedo almacenar la referencia a una blobstorekey en un modelo? ¿Debo usar una cadena o debería usar alguna propiedad especial que no conozca? Tengo este modelo

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

Y me sale este error: BlobKey propiedad debe ser una instancia de str o Unicode, no un BlobKey

Por supuesto, soy un novato en el motor de aplicación, pero esta es la primera pared principal He golpeado todavía. Han buscado en Google extensamente sin éxito.

Respuesta

1

En lugar de un db.StringProperty() es necesario utilizar db.blobstore.BlobReferenceProperty (creo)

Todavía estoy tratando de resolver esto también, pero pensé que había puesto algunas ideas .

Estas son las páginas de referencia de Google: http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html

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

+0

voy a trabajar en esta parte del fin de semana del día del trabajo .. . eso es si mi esposa no a través de la computadora portátil por la ventana (se casa el sábado!). – Sologoub

11

Los siguientes trabajos para mí. Tenga en cuenta que la clase es blobstore.blobstore en lugar de solo blobstore.

Modelo:

from google.appengine.ext.blobstore import blobstore 

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

Establecer la propiedad:

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

obtener la propiedad:

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

Gracias por eso señor. Lo probaré. –

Cuestiones relacionadas