2010-07-14 4 views
1

J'ai des modèles dans différents fichiers (blog/models.py, forum/models.py, article/models.py). Dans chacun de ces fichiers, j'ai défini des classes de modèles avec le préfixe d'application (BlobPost, BlogTag, ForumPost, ForumThread, Article, ArticleCategory).Comment précharger le modèle pour ReferenceProperty?

J'ai aussi appliation - comment, pour ajouter un commentaire attaché à un objet du modèle. Par exemple, je souhaite commenter BlogPost ou ajouter un commentaire référencé à ForumPost. Pour cela j'utilise la propriété avec le type ReferenceProperty() - sans spécifier le type de références. Tout modèle peut être joint au commentaire.

Quel est le problème? Si j'ai tous les commentaires dans la section d'administration, je vois un problème avec les modèles de chargement automatique pour ReferenceProperty. Je ne sais pas, quel type de modèle utilisé pour le commentaire actuel. J'ai besoin de charger automatiquement le paquet avec le modèle, si cela est nécessaire.

Oui, existe solution simple - inclure tous les modèles de toutes les applications. Mais, ce n'est pas une bonne solution. J'ai besoin de charger seulement besoin de modèles. Comment faire cela autoloading?

Mon idée est basée sur la détection du type de propriété, et par la première partie de ce nom, détecter le nom de l'application pour charger tous les modèles dans cette application. Par exemple, j'ai un commentaire avec Référence au modèle BlogPost. Je reçois le nom de l'application - Blog et charger tous les modèles de blog.models import *

Pour mettre en œuvre mon idée, je dois comprendre - comment intercepter la création d'instances de propriété. Dans mon cas, si je boucle sur les commentaires, je vois que App Engine crée automatiquement (merci, mais pas dans mon cas) des instances pour les propriétés. Comment injecter ma logique pour charger mes modèles avant de créer une instance de propriété?

Merci!

Répondre

1

Ceci n'est pas possible dans le cadre standard de la base de données, car il n'y a pas suffisamment d'informations pour trouver vos modèles. La seule information avec laquelle le framework doit travailler est le nom de type, qui n'inclut pas le package entièrement qualifié. Il n'a donc aucun moyen de savoir dans quel package se trouve votre définition de modèle.

Si vous écrivez Cependant, une interface d'administration vous permet probablement d'utiliser l'interface google.appengine.api.datastore de bas niveau, qui fonctionne sur les dicts au lieu des classes de modèles et ne nécessite pas de définition de modèle.

+0

Merci Nick! J'ai trouvé une solution. J'ai chargé tous les modèles dans la première demande, et cache cette valeur pour toutes les demandes suivantes. Cela m'aide à gagner du temps pour charger tous les modèles, et j'ai également chargé tous les modèles en mémoire. Comme mes modèles ont un préfixe unique avec le nom du modèle (BlogPost, ForumComment, etc) - nous n'avons pas de problème avec des noms de modèles égaux. Problème a été résolu par moi dans le cadre AppEngine. Merci pour votre aide! –

Questions connexes