Как обновить модель - PullRequest
3 голосов
/ 16 мая 2011

Предположим, у меня есть определение модели, например:

class Image(db.Model):
    id = db.StringProperty()
    url = db.URLProperty()

Теперь я хочу добавить несколько полей в эту модель, чтобы она выглядела следующим образом:

class Image(db.Model):
    id = db.StringProperty()
    url = db.URLProperty()
    width = db.IntegerProperty()
    height = db.IntegerProperty()

Итак, этоновая модель будет применена правильно к вновь добавленным Image объектам.Но я также хочу обновить уже существующие сущности, чтобы они содержали эти два новых поля и заполняли их значениями.Получит ли уже существующая сущность эти два поля автоматически, поэтому, когда я на них ссылаюсь, это даст мне пустые поля или это вызовет ошибку?Я полагаю, мне придется создать вспомогательную функцию, которая будет проходить через все существующие сущности и устанавливать новые значения полей, верно?Итак, что я должен иметь в виду и как лучше обновить эту модель?Я думаю, что это иногда случается, когда приложение появляется, поэтому я думаю, что было бы полезно иметь какой-то прямой поток для этого.

Ответы [ 2 ]

3 голосов
/ 16 мая 2011

Этот точный сценарий описан в документации GAE (раздел статей):

Обновление схемы вашей модели.

В основном просто измените определение модели, как вы это сделали, затем выполните некоторую операцию, чтобы предоставить значения по умолчанию для всех ваших существующих сущностей. Есть несколько способов сделать вторую часть - статья описывает один.

2 голосов
/ 16 мая 2011

Ни одна уже существующая сущность не получит эти два поля автоматически или не примет их в None.Это приведет к ошибке при доступе к этим полям в существующих объектах.Единственное доступное решение сейчас - это использовать remote_apy и написать свой собственный скрипт для обновления существующих записей.Это не будет большой проблемой, напишите сценарий, чтобы получить все записи в хранилище данных и установить некоторые значения по умолчанию для новых атрибутов.

  1. Setting_Up_remote_api
  2. Update_schema
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...