Разработка моделей BlobReferenceProperty и ReferenceProperty - PullRequest
2 голосов
/ 24 мая 2011

У меня есть вопрос дизайна, является ли BlobReferenceProperty в основном ReferenceProperty?Должен ли я сделать предварительную выборку (предложенную Ником http://blog.notdot.net/2010/01/ReferenceProperty-prefetching-in-App-Engine), как для ReferenceProperty?

В настоящее время у меня есть этот дизайн:

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)

Спасибо.

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Свойство Blobreference аналогично db.ReferenceProperty, за исключением того факта, что сущность фактически находится в хранилище BLOB-объектов.Таким образом, предварительная выборка ReferenceProperty применяется и к BlobReferenceProperty.blobstore.py также включает get_value_for_datastore, с помощью которого вы можете предварительно выбрать объекты BLOB-объектов.

Переходя ко второму вопросу, перемещая BLOB-объект в запись, это зависит от ваших функций.

0 голосов
/ 24 мая 2011

Вы можете использовать что-то похожее на свои первые модели, если вам понадобится отношение «один ко многим» между входом и изображением, если вы хотите, чтобы каждая запись могла соответствовать множеству изображений.Я использую отношения примерно так:

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