2009-05-17 14 views
2

Je construis une classe de modèle AppEngine. J'ai besoin d'une simple liste de tuples:Liste des types non stockés dans DatoStore dans AppEngine?

class MyTuple(object): 
    field1 = "string" 
    field2 = 3 

class MyModel(db.Model): 
    the_list = db.ListProperty(MyTuple) 

Cela ne fonctionne pas, puisque AppEngine n'accepte pas MyTuple comme un champ valide.

Solutions Je peux penser:

  1. Marque MyTuple. Db.Model étendent Mais cela ne signifie-t-il pas que chaque entrée de la liste sera stockée dans une table MyTuple dédiée? Faites-en une liste de chaînes, qui sont une forme "sérialisée" de MyTuple; ajouter du code d'analyse (désérialisation). Yuck.

  2. Conserver deux listes (une des chaînes, une des entiers). Un autre beuglement.

Une autre solution qui me manque?

Répondre

1

Dans app-engine-patch, il existe un FakeModelListProperty et un FakeModel (importent les deux à partir de ragendja.dbutils). Dérivez MyTuple de FakeModel et définissez fields = ('field1', 'field2'). Ces champs seront automatiquement convertis en JSON lorsqu'ils sont stockés dans la liste, vous pouvez donc les modifier manuellement dans une zone de texte. Bien sûr, cela ne fonctionne que pour les types primitifs (chaînes, entiers, etc.). Jetez un oeil à la source si cela ne suffit pas.

http://code.google.com/p/app-engine-patch/

Questions connexes