Как смоделировать множество BLOB-объектов для объекта?

Я хочу включить что-то вроде отношения «один ко многим» между текстовым объектом и каплями, чтобы текстовый объект («статья» или аналогичный) имел много изображений и/или видео. Я вижу два способа сделать это, где первый использует список больших двоичных объектов в качестве переменной экземпляра. Это будет работать?

class A(search.SearchableModel):
  blobs = db.ListProperty(blobstore.BlobReferenceProperty())

Преимущества: Всего один класс. Читаемый и простой для получения и установки данных. Недостатки: не хватает дополнительной информации для больших двоичных объектов, например. если я хочу пометить блоб описательными словами, мне все равно нужны два класса:

class A(search.SearchableModel):
...
class B(db.Model):
  reference=db.ReferenceProperty(A,collection_name='matched_blobs',verbose_name="Title")
  blob = blobstore.BlobReferenceProperty()

У более позднего примера есть недостаток, поскольку он требует свойства reference и вводит 2 класса, где проблема может быть решена только с классом A, как в первом примере. Преимущество более позднего решения заключается в том, что оно четко задокументировано, в то время как listproperty blobreferenceproperties — нет, а более позднее решение я уже реализовал, и теперь я думаю об использовании списка больших двоичных объектов вместо коллекции, на которую ссылаются. Имеет ли это значение или оба будут работать одинаково хорошо? Можете ли вы порекомендовать, какой способ выбрать, если какой-либо из этих или других?

Спасибо


person Niklas R.    schedule 26.08.2011    source источник


Ответы (1)


В документации App Engine есть статья об этом: http://code.google.com/appengine/articles/modeling.html

person Paddy    schedule 26.08.2011
comment
Спасибо за ссылку! db.ListProperty(blobstore.BlobReferenceProperty()), которого я никогда не видел в использовании, и, возможно, он не сработает. Я хочу, чтобы теперь было легко определить, какие капли принадлежат какой сущности, и наоборот. Я мог бы оставить здесь модель с двумя классами. - person Niklas R.; 29.08.2011
comment
@Niklas Это не сработает - у вас есть список элементов, а не список свойств. Вы хотите db.ListProperty(blobstore.BlobKey). - person Nick Johnson; 30.08.2011
comment
db.ListProperty(blobstore.BlobKey) это то, что я искал. Интересно, что произойдет в представлении данных консоли администратора хранилища данных, если я использую ListpRoperty вместо ссылки. Теперь есть четкая ссылка на просмотр большого двоичного объекта, если я использую свою текущую реализацию, в которой все еще есть следы от использования старой переменной экземпляра blobproperty, и я хочу иметь возможность использовать get_serving_url, поэтому я перемещаю все большие двоичные объекты в хранилище больших двоичных объектов и не буду использовать db.BlobProperty так как blobstore намного лучше с get_serving_url и представлениями администратора. - person Niklas R.; 30.08.2011