Продолжаю работать с AppEngine. Столкнулся с мыслью, что использование целого числа для статуса не очень удобно. Я привык к C# и конструкции языка, типа Enum. По этому, решил найти нечто подобное для GAE. Идея в том, чтобы использовать следующий синтаксис:
status = validators.EnumProperty(choice=['not_moderated','moderated','blocked'])
Класс для поля перечеслиения выглядит так:
from google.appengine.ext import db class EnumProperty(db.Property): """ Maps a list of strings to be saved as int. The property is set or get using the string value, but it is stored using its index in the 'choices' list. """ data_type = int def __init__(self, choices=None, **kwargs): if not isinstance(choices, list): raise TypeError('Choices must be a list.') super(EnumProperty, self).__init__(choices=choices, **kwargs) def get_value_for_datastore(self, model_instance): value = self.__get__(model_instance, model_instance.__class__) if value is not None: return int(self.choices.index(value)) def make_value_from_datastore(self, value): if value is not None: return self.choices[int(value)] def empty(self, value): return value is None
Похожие статьи
- 2 апреля 2010 -- AppEngine валидация полей базы и формы (1)
- 5 апреля 2010 -- Чистим HTML в AppEngine (Sanitize HTML) (6)
- 30 июля 2010 -- DLR 1.0 на примере IronPython 2.6 (0)
- 31 марта 2010 -- Чистка тестовой App Engine базы. (0)
- 2 апреля 2010 -- AppEngine изучаем Request и globals (0)
27 апреля, 2010 at 15:42
Good work, keep us posting, you are good writer.