@mjhmと@Nickのお勧めのとおり、ListPropertyをサブクラス化して任意のクラスを受け入れました。 ObjectListPropertyという名前のuploaded a generic version to GitHubがあります。私は、パラレルListPropertyを使用する代わりに、よりクリーンな方法として使用します。
ObjectListPropertyは、&モデルを公開するときに透過的にシリアル化/逆シリアル化します。単純なオブジェクトに対しては内部的な直列化メソッドがありますが、独自の直列化メソッドを定義すると複雑なオブジェクトにも対応できます。ここでは簡単な例を示します:
from object_list_property import ObjectListProperty
class Animal():
""" A simple object that we want to store with our model """
def __init__(self, species, sex):
self.species = species
self.sex = sex if sex == 'male' or sex == 'female' else 'unknown'
class Zoo(db.Model):
""" Our model contains of list of Animal's """
mammals = ObjectListProperty(Animal, indexed=False)
class AddMammalToZoo(webapp.RequestHandler):
def post(self):
# Implicit in get is deserializing the ObjectListProperty items
zoo = Zoo.all().get()
animal = Animal(species=self.request.get('species'),
sex=self.request.get('sex'))
# We can use our ObjectListProperty just like a list of object's
zoo.mammals.append(animal)
# Implicit in put is serializing the ObjectListProperty items
zoo.put()
リンクが壊れていて、これまで存在していたという証拠が見つかりません:( – Thomas
@Thomas Fixed!ヘッドアップありがとう –
リンクが再び壊れていますが、これは同じことです:https:/ /github.com/Willet/ObjectListProperty –