多数の既存のインスタンスを持つエンティティ モデルにリスト プロパティを追加しました。
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
次の場合:
Aaron D の提案に従って、デフォルト値を空のリストに変更すると、この問題が解決したため、次のようになります。
new_property = db.ListProperty(item_type=str, default=None)
読むべき:
new_property = db.ListProperty(item_type=str, default=[])