2

我有一个设计问题是 BlobReferenceProperty 基本上是 ReferenceProperty?我应该像 ReferenceProperty 那样进行预取(由 Nick http://blog.notdot.net/2010/01/ReferenceProperty-prefetching-in-App-Engine建议)吗?

目前我有这个设计:

class Entry(db.Model):
  creator     = db.ReferenceProperty(User, required=True, collection_name='entries')
  created_at  = db.DateTimeProperty(auto_now_add=True)

  # image
  image_id    = db.StringProperty() # key_name for Image
  image_url   = db.LinkProperty(indexed=False)
  width       = db.IntegerProperty(default=0, indexed=False)
  height      = db.IntegerProperty(default=0, indexed=False)


class Image(db.Model):
  created_at    = properties.DateTimeProperty(auto_now_add=True)
  blob          = blobstore.BlobReferenceProperty(required=True)
  filename      = db.StringProperty(indexed=False)
  published     = db.BooleanProperty(default=False, indexed=True)
  width         = db.IntegerProperty(default=0, indexed=False)
  height        = db.IntegerProperty(default=0, indexed=False)

这会更好还是更糟?我已将 blob 移至 Entry。

class Entry(db.Model):
  creator     = db.ReferenceProperty(User, required=True, collection_name='entries')
  created_at  = db.DateTimeProperty(auto_now_add=True)

  # image     
  image_blob  = blobstore.BlobReferenceProperty(required=False)
  filename    = db.StringProperty(indexed=False)
  image_id    = db.StringProperty()
  image_url   = db.LinkProperty(indexed=False)
  width       = db.IntegerProperty(default=0, indexed=False)
  height      = db.IntegerProperty(default=0, indexed=False)

谢谢。

4

2 回答 2

1

Blobreference 属性与 db.ReferenceProperty 类似,但实体实际上位于 blobstore 中。所以预取 ReferenceProperty 也适用于 BlobReferenceProperty。blobstore.py 还包括 get_value_for_datastore ,您可以使用它来预取 blob 实体。

谈到您的第二个问题,将 blob 移动到 Entry ,这取决于您的功能。

于 2011-05-24T12:40:34.710 回答
0

如果您需要条目和图像之间的一对多关系,如果您希望每个条目能够匹配许多图像,则可以使用类似于您的第一个模型的东西。我使用的关系有点像这样:

class Article(db.Model):      
    user=db.UserProperty(verbose_name="userid") 

class Image(db.Model):       
    reference=db.ReferenceProperty(Article,collection_name='matched_images')
    primary_image = blobstore.BlobReferenceProperty() 
于 2011-05-24T13:43:53.420 回答