Nano Hash - криптовалюты, майнинг, программирование

Google Datastore NDB проверяет необязательный IntegerProperty

Как вы проверяете пустую строку поля формы '', чтобы присвоить None IntegerProperty?

class MyIntegerProperty(ndb.IntegerProperty):
    def _validate(self, value):
        if isinstance(value, basestring):
            if len(value) == 0 and self._required is False:
                return ?????????????????
            try:
                value = int(value)
            except ValueError:
                raise BadValueError(u'{0} must be a valid ' 
                    'integer'.format(self._name))
        if value < 0:
            raise BadValueError(u'{0} must be ' 
                'positive'.format(self._name))
        return value

class Account(ndb.Model):
    posint = MyIntegerProperty()

Документы говорят:

То, что _validate(), _to_base_type() и _from_base_type() не нужно обрабатывать:

None: они не будут вызываться с None (и если они возвращают None, это означает, что значение не нуждается в преобразовании).

Что я сейчас делаю, так это вручную обрабатываю дело:

if len(request.form[name]) == 0:
    delattr(entity, name)
else:
    setattr(entity, name, request.form[name])

это может быть умнее, чем это?


Ответы:


1

Валидатор может либо создать значение свойства, либо вызвать исключение, препятствующее сохранению объекта. Из таблицы Параметры ресурса:

Будет вызываться с аргументами (prop, value) и должен либо возвращать (возможно, принудительно) значение, либо вызывать исключение. Повторный вызов функции для принудительного значения не должен изменять значение дальше. (Например, возвращение value.strip() или value.lower() допустимо, но не value + '$'.) также вернуть None, что означает "без изменений". См. также Написание подклассов свойств.

Но ничто из вышеперечисленного не является тем, чего вы на самом деле хотите, а именно удалить свойство. Обратите внимание, что:

  • установка значения свойства None (что не удастся, например, для IntegerProperty) — это не то же самое, что удаление свойства (совершенно нормально для IntegerProperty)
  • установка значения свойства None при использовании валидатора может быть сложной задачей, поскольку возврат None из валидатора означает no change.

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

27.11.2018
  • Хорошо, я оставлю свое текущее решение. Я бы сказал, что если None является недопустимым значением для IntegerProperty, я ожидаю, что мой account.posint is None вернет False 28.11.2018
  • Вероятно, связано с тем, почему валидатор не будет вызываться с None. 28.11.2018
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..