Необязательное поле ссылки в хранилище данных ядра приложения - PullRequest
0 голосов
/ 21 октября 2018

У меня есть модель

class MyModel(ndb.Model):
    foo = ndb.StringProperty()

class OtherModel(ndb.Model):
    baz = ndb.StringProperty()
    ref = ndb.KeyProperty(kind=MyModel)

Я создал представление, в котором я могу создавать и изменять эти объекты модели, и я хотел бы, чтобы поле ref в OtherModel было необязательным, но когда я пытаюсьотправить и очистить поле ref или удалить его старое значение. Я получил ошибку проверки ndb.KeyProperty

Моя логика обновления выглядит следующим образом:

for property in editableProperties:
    # Lets suppose this parses values from a form in a request to the needed type
    new_value = deserialize(property._kind, self.request.get(property._name))
    setattr(item, property._name, new_value)

Где япопытался установить new_value в None и пустую строку.Как я могу сделать это возможным?

1 Ответ

0 голосов
/ 21 октября 2018

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

Другими словами: не делать вообще

`setattr(item, property._name, new_value)`

для ref когда new_value не является ключом.Вместо этого сделайте что-нибудь по следующим направлениям:

if hasattr(item, property._name):
   delattr(item, property._name)
...