Я добавил свойство списка в модель сущности с большим количеством существующих экземпляров.BadValueError: требуется свойство X
class MyModel(db.Model):
new_property = db.ListProperty(item_type=str, default=None)
После развертывания в живую среду приложение работает без проблем в течение короткого времени, а затем начинает бросать BadValueError ошибка, поскольку она пытается получить записи из хранилища данных.
код бросает ошибку только прямой вызов к хранилищу данных:
app_item = db.get(app_item_key)
Я использую 1.7.5. времени выполнения Python 2.7.
Любые идеи о том, что я могу сделать, чтобы предотвратить это, или, по крайней мере, уловить его, чтобы я мог получать данные из магазина?
Traceback (most recent call last):
File "/base/data/home/apps/app/4-15.365909351579418812/app.py", line 1739, in app_get
app_item = db.get(app_item_key)
File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 1533, in get
return get_async(keys, **kwargs).get_result()
File "/python27_runtime/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 604, in get_result
return self.__get_result_hook(self)
File "/python27_runtime/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 1459, in __get_hook
entities = rpc.user_data(entities)
File "/python27_runtime/python27_lib/versions/1/google/appengine/api/datastore.py", line 600, in local_extra_hook
return extra_hook(result)
File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 1503, in extra_hook
model = cls1.from_entity(entity)
File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 1438, in from_entity
return cls(None, _from_entity=entity, **entity_values)
File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 970, in __init__
prop.__set__(self, value)
File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 614, in __set__
value = self.validate(value)
File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 3460, in validate
value = super(ListProperty, self).validate(value)
File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 641, in validate
raise BadValueError('Property %s is required' % self.name)
BadValueError: Property new_property is required
Для тех, которые следуют:
По предложению Аарона двойки, изменяя значение по умолчанию для пустого списка решить эту проблему, так:
new_property = db.ListProperty(item_type=str, default=None)
следует читать:
new_property = db.ListProperty(item_type=str, default=[])
Можете ли вы опубликовать еще более подходящий код, например, ваши поисковые вызовы? Похоже, что это может быть слабо связано с http://stackoverflow.com/questions/6142439/badvalueerror-property-xxxx-is-required-even-after-the-xxxx-property-has-alrea?rq=1 –
Этот ответ могут относиться: http://stackoverflow.com/a/10012905/399704 –
В обоих случаях они относятся к атрибуту required = true, применяемому к свойству, но здесь это не так (хотя оно ведет себя как есть, хотя оно и есть) , – notreadbyhumans