изменить формат свойства - PullRequest
1 голос
/ 15 февраля 2012

Что лучше всего преобразовать StringProperty в IntegerProperty без кода разрыва и делать это динамически, не меняя все сущности вида?

Очевидно, что данные верны.

Например: StringProperty = u'1234 'преобразовать в IntegerProperty = 1234

Теперь при изменении свойства в модели с str на int при извлечении данных это свойство сообщает None

спасибо

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Вы можете использовать GenericProperty плюс хук post-get, который изменяет строку на целое и записывает ее обратно. Вы можете сделать обратную запись асинхронной.

1 голос
/ 15 февраля 2012

Если вы используете NDB, вы также можете попробовать ComputedProperty:

https://docs.google.com/document/d/1dsx1hihmMXMJm8wIRu49tJR-KEng80o3wkg4Nlbqn-w/edit#heading=h.crpcpjr4rp21

хорошо, тогда вы можете определить свой собственный тип свойства, например

class Str2IntProperty(Property):
  """A Property whose original string value will be converted to an integer."""

  def _validate(self, value):
    if not isinstance(value, (int, long, str)):
      raise datastore_errors.BadValueError('Expected integer, got %r' %
                                           (value,))
    return int(value)

  def _db_set_value(self, v, unused_p, value):
    if not isinstance(value, (str, int, long)):
      raise TypeError('Str2IntProperty %s can only be set to integer or string values; '
                      'received %r' % (self._name, value))
    v.set_int64value(int(value))

  def _db_get_value(self, v, unused_p):
    if not v.has_int64value():
      try:
        return int(v)
      except ValueError:
        return 0
    return int(v.int64value())

А потом в твоей модели

class MyModel(ndb.Model):
  my_prop = Str2IntProperty()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...