2010-08-27 6 views
8

Also habe ich mich entschieden, meine Bildergalerie wegen der neuen High-Performance Image Serving Sache neu zu schreiben. Das bedeutete die Verwendung von Blobstore, die ich noch nie zuvor benutzt hatte. Es schien einfach genug zu sein, bis ich versuchte, den BlobKey in meinem Modell zu speichern.Speichern von BlobKey im DataStore mit App-Engine

Wie in aller Welt speichere ich einen Verweis auf einen Blobstorekey in einem Modell? Sollte ich eine Zeichenfolge verwenden oder sollte ich eine spezielle Eigenschaft verwenden, die ich nicht kenne? Ich habe dieses Modell

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

Und ich bekomme diese Fehlermeldung: Immobilien BlobKey ein str oder Unicode-Instanz sein muss, keine BlobKey

Zugegeben, ich bin ein Neuling in App Engine, aber dies ist die erste große Wand Ich habe schon getroffen. Ausgiebig gegoogelt ohne Erfolg.

Antwort

1

Statt eines db.StringProperty() benötigen Sie db.blobstore.BlobReferenceProperty zu verwenden (glaube ich)

Ich versuche immer noch, diese Sache auch um herauszufinden, aber dachte, ich würde ein paar Ideen posten .

Hier sind die Referenzseiten von Google: http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html

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

+0

Ich werde auf diesen Teil über den Tag der Arbeit Wochenende arbeiten .. Das ist, wenn meine Frau nicht durch den Laptop aus dem Fenster (heiraten am Samstag!). – Sologoub

11

Die folgenden Werke für mich. Beachten Sie, dass die Klasse blobstore.blobstore anstelle von blobstore lautet.

Modell:

from google.appengine.ext.blobstore import blobstore 

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

die Eigenschaft Set:

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

Holen Sie sich das Objekt:

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

Vielen Dank für diesen Herrn. Werde das ausprobieren. –

Verwandte Themen